diff --git a/pelican/contents.py b/pelican/contents.py index 4655d4cc..43333e18 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -114,14 +114,16 @@ class Page(object): @property def url_format(self): - return { + metadata = copy.copy(self.metadata) + metadata.update({ 'slug': getattr(self, 'slug', ''), 'lang': getattr(self, 'lang', 'en'), 'date': getattr(self, 'date', datetime.now()), 'author': getattr(self, 'author', ''), 'category': getattr(self, 'category', self.settings['DEFAULT_CATEGORY']), - } + }) + return metadata def _expand_settings(self, key): fq_key = ('%s_%s' % (self.__class__.__name__, key)).upper() diff --git a/tests/test_contents.py b/tests/test_contents.py index eb7b6514..3f3d858c 100644 --- a/tests/test_contents.py +++ b/tests/test_contents.py @@ -99,6 +99,16 @@ class TestPage(unittest.TestCase): page = Page(**self.page_kwargs) self.assertEqual(page.save_as, "pages/foo-bar-fr.html") + def test_metadata_url_format(self): + """Arbitrary metadata should be passed through url_format() + """ + page = Page(**self.page_kwargs) + self.assertIn('summary', page.url_format.keys()) + page.metadata['directory'] = 'test-dir' + page.settings = _DEFAULT_CONFIG.copy() + page.settings['PAGE_SAVE_AS'] = '{directory}/{slug}' + self.assertEqual(page.save_as, 'test-dir/foo-bar') + def test_datetime(self): """If DATETIME is set to a tuple, it should be used to override LOCALE """