diff --git a/docs/changelog.rst b/docs/changelog.rst
index aa594a2c..7ed84eba 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -5,6 +5,7 @@ Next release
============
* New signal: ``feed_generated``
+* Make the HTML reader parse multiple occurences of metadata tags as list
3.7.1 (2017-01-10)
==================
diff --git a/pelican/readers.py b/pelican/readers.py
index 61126c9c..e24354e3 100644
--- a/pelican/readers.py
+++ b/pelican/readers.py
@@ -440,7 +440,17 @@ class HTMLReader(BaseReader):
if name == 'keywords':
name = 'tags'
- self.metadata[name] = contents
+
+ if name in self.metadata:
+ # if this metadata already exists (i.e. a previous tag with the
+ # same name has already been specified then either convert to
+ # list or append to list
+ if isinstance(self.metadata[name], list):
+ self.metadata[name].append(contents)
+ else:
+ self.metadata[name] = [self.metadata[name], contents]
+ else:
+ self.metadata[name] = contents
@classmethod
def _attr_value(cls, attrs, name, default=None):
diff --git a/pelican/tests/content/article_with_multiple_metadata_tags.html b/pelican/tests/content/article_with_multiple_metadata_tags.html
new file mode 100644
index 00000000..f03c0b46
--- /dev/null
+++ b/pelican/tests/content/article_with_multiple_metadata_tags.html
@@ -0,0 +1,11 @@
+
+
+ Metadata tags as list!
+
+
+
+
+ When custom metadata tags are specified more than once
+ they are collected into a list!
+
+
diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py
index 732dd60a..0326cb5e 100644
--- a/pelican/tests/test_generators.py
+++ b/pelican/tests/test_generators.py
@@ -173,6 +173,7 @@ class TestArticlesGenerator(unittest.TestCase):
['Article with markdown containing footnotes', 'published',
'Default', 'article'],
['Article with template', 'published', 'Default', 'custom'],
+ ['Metadata tags as list!', 'published', 'Default', 'article'],
['Rst with filename metadata', 'published', 'yeah', 'article'],
['Test Markdown extensions', 'published', 'Default', 'article'],
['Test markdown File', 'published', 'test', 'article'],
@@ -452,6 +453,7 @@ class TestArticlesGenerator(unittest.TestCase):
'Article with markdown and summary metadata single',
'Article with markdown containing footnotes',
'Article with template',
+ 'Metadata tags as list!',
'Rst with filename metadata',
'Test Markdown extensions',
'Test markdown File',
diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py
index 4db4938e..d21fcbfb 100644
--- a/pelican/tests/test_readers.py
+++ b/pelican/tests/test_readers.py
@@ -657,6 +657,14 @@ class HTMLReaderTest(ReaderTest):
self.assertDictHasSubset(page.metadata, expected)
+ def test_article_with_multiple_similar_metadata_tags(self):
+ page = self.read_file(path='article_with_multiple_metadata_tags.html')
+ expected = {
+ 'custom_field': ['http://notmyidea.org', 'http://mrsenko.com'],
+ }
+
+ self.assertDictHasSubset(page.metadata, expected)
+
def test_article_with_multiple_authors(self):
page = self.read_file(path='article_with_multiple_authors.html')
expected = {