diff --git a/docs/faq.rst b/docs/faq.rst index a8617b30..9429a44f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -92,6 +92,22 @@ want to have its own template. Then just make sure your theme contains the relevant template file (e.g. ``template_name.html``). +How can I override the generated url of a specific page or article? +=================================================================== + +It's as simple as specifying the ``url`` and ``save_as`` special metadata to +any pages or articles you want to override the generated url. +Here is an example rst page:: + + Override url/save_as page + ######################### + + :url: override/url/ + :save_as: override/url/index.html + +You're done, the page will be written to ``override/url/index.html`` +and Pelican will use url ``override/url/`` to link to this page. + What if I want to disable feed generation? ========================================== diff --git a/pelican/contents.py b/pelican/contents.py index 3ead073f..de2b7512 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -53,6 +53,8 @@ class Page(object): # set metadata as attributes for key, value in local_metadata.items(): + if key in ('save_as', 'url'): + key = 'override_' + key setattr(self, key.lower(), value) # also keep track of the metadata attributes available @@ -138,6 +140,8 @@ class Page(object): return self.settings[fq_key].format(**self.url_format) def get_url_setting(self, key): + if hasattr(self, 'override_' + key): + return getattr(self, 'override_' + key) key = key if self.in_default_lang else 'lang_%s' % key return self._expand_settings(key) diff --git a/samples/content/pages/override_url_saveas.rst b/samples/content/pages/override_url_saveas.rst new file mode 100644 index 00000000..8a515f60 --- /dev/null +++ b/samples/content/pages/override_url_saveas.rst @@ -0,0 +1,9 @@ +Override url/save_as +#################### + +:date: 2012-12-07 +:url: override/ +:save_as: override/index.html + +Test page which overrides save_as and url so that this page will be generated +at a custom location. diff --git a/tests/output/basic/a-markdown-powered-article.html b/tests/output/basic/a-markdown-powered-article.html index aa43a448..e105cfe7 100644 --- a/tests/output/basic/a-markdown-powered-article.html +++ b/tests/output/basic/a-markdown-powered-article.html @@ -22,7 +22,8 @@