summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Garske <git@v-gar.de>2020-07-23 16:42:25 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-07-30 07:36:27 +0200
commit1173db4a16bb2938ba62a6cd50372a76a7f9e05f (patch)
tree69f95aef9fbd7875f16238ba7ae0e62c3a0057aa
parent184a6eebb0ef56d5f1b1315a8e666830e37f3f81 (diff)
Fixed #31822 -- Added support for comments URL per feed item.
The item_comments hook returns a comments URL which is then used by the feed builder.
-rw-r--r--django/contrib/syndication/views.py1
-rw-r--r--docs/ref/contrib/syndication.txt21
-rw-r--r--docs/releases/3.2.txt3
-rw-r--r--tests/syndication_tests/feeds.py3
-rw-r--r--tests/syndication_tests/tests.py12
5 files changed, 38 insertions, 2 deletions
diff --git a/django/contrib/syndication/views.py b/django/contrib/syndication/views.py
index 68ffb0bfe0..df97103318 100644
--- a/django/contrib/syndication/views.py
+++ b/django/contrib/syndication/views.py
@@ -212,6 +212,7 @@ class Feed:
author_name=author_name,
author_email=author_email,
author_link=author_link,
+ comments=self._get_dynamic_attr('item_comments', item),
categories=self._get_dynamic_attr('item_categories', item),
item_copyright=self._get_dynamic_attr('item_copyright', item),
**self.item_extra_kwargs(item)
diff --git a/docs/ref/contrib/syndication.txt b/docs/ref/contrib/syndication.txt
index 13aa944e8a..e9063d0629 100644
--- a/docs/ref/contrib/syndication.txt
+++ b/docs/ref/contrib/syndication.txt
@@ -889,6 +889,27 @@ This example illustrates all possible attributes and methods for a
item_copyright = 'Copyright (c) 2007, Sally Smith' # Hard-coded copyright notice.
+ # ITEM COMMENTS URL -- It's optional to use one of these three. This is
+ # a hook that specifies how to get the URL of a page for comments for a
+ # given item.
+
+ def item_comments(self, obj):
+ """
+ Takes an item, as returned by items(), and returns the item's
+ comments URL as a normal Python string.
+ """
+
+ def item_comments(self):
+ """
+ Returns the comments URL for every item in the feed.
+ """
+
+ item_comments = 'https://www.example.com/comments' # Hard-coded comments URL
+
+.. versionchanged:: 3.2
+
+ Support for a comments URL per feed item was added through the
+ ``item_comments`` hook.
The low-level framework
=======================
diff --git a/docs/releases/3.2.txt b/docs/releases/3.2.txt
index 129026cf89..ada68addea 100644
--- a/docs/releases/3.2.txt
+++ b/docs/releases/3.2.txt
@@ -144,7 +144,8 @@ Minor features
:mod:`django.contrib.syndication`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-* ...
+* The new ``item_comments`` hook allows specifying a comments URL per feed
+ item.
Cache
~~~~~
diff --git a/tests/syndication_tests/feeds.py b/tests/syndication_tests/feeds.py
index 4e9b1170b1..adc3b2e56c 100644
--- a/tests/syndication_tests/feeds.py
+++ b/tests/syndication_tests/feeds.py
@@ -29,6 +29,9 @@ class TestRss2Feed(views.Feed):
def item_updateddate(self, item):
return item.updated
+ def item_comments(self, item):
+ return "%scomments" % item.get_absolute_url()
+
item_author_name = 'Sally Smith'
item_author_email = 'test@example.com'
item_author_link = 'http://www.example.com/'
diff --git a/tests/syndication_tests/tests.py b/tests/syndication_tests/tests.py
index dab7ebab33..d9456ed618 100644
--- a/tests/syndication_tests/tests.py
+++ b/tests/syndication_tests/tests.py
@@ -136,10 +136,20 @@ class SyndicationFeedTest(FeedTestCase):
'guid': 'http://example.com/blog/1/',
'pubDate': pub_date,
'author': 'test@example.com (Sally Smith)',
+ 'comments': '/blog/1/comments',
})
self.assertCategories(items[0], ['python', 'testing'])
for item in items:
- self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'category', 'pubDate', 'author'])
+ self.assertChildNodes(item, [
+ 'title',
+ 'link',
+ 'description',
+ 'guid',
+ 'category',
+ 'pubDate',
+ 'author',
+ 'comments',
+ ])
# Assert that <guid> does not have any 'isPermaLink' attribute
self.assertIsNone(item.getElementsByTagName(
'guid')[0].attributes.get('isPermaLink'))