From: Stephen Burrows Date: Thu, 23 Sep 2010 16:27:24 +0000 (-0400) Subject: Modified FeedMultiViewMixin to allow greater customization of feed creation, especial... X-Git-Tag: philo-0.9~32^2~1 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/144927ed56fbd9293a436818421fd119a4b4bedb Modified FeedMultiViewMixin to allow greater customization of feed creation, especially with regards to feed titles. Tweaked BlogView and NewsletterView to be in line with the changes. --- diff --git a/contrib/penfield/models.py b/contrib/penfield/models.py index 3cbff52..f927a58 100644 --- a/contrib/penfield/models.py +++ b/contrib/penfield/models.py @@ -75,10 +75,6 @@ class BlogView(MultiView, FeedMultiViewMixin): def per_page(self): return self.entries_per_page - @property - def feed_title(self): - return self.blog.title - def get_subpath(self, obj): if isinstance(obj, BlogEntry): if obj.blog == self.blog: @@ -211,6 +207,19 @@ class BlogView(MultiView, FeedMultiViewMixin): defaults.update(kwargs or {}) super(BlogView, self).add_item(feed, obj, defaults) + def get_feed(self, feed_type, extra_context, kwargs=None): + tags = (extra_context or {}).get('tags', None) + title = self.blog.title + + if tags is not None: + title += " - %s" % ', '.join([tag.name for tag in tags]) + + defaults = { + 'title': title + } + defaults.update(kwargs or {}) + return super(BlogView, self).get_feed(feed_type, extra_context, defaults) + def entry_view(self, request, slug, year=None, month=None, day=None, node=None, extra_context=None): entries = self.blog.entries.all() if year: @@ -301,10 +310,6 @@ class NewsletterView(MultiView, FeedMultiViewMixin): def __unicode__(self): return self.newsletter.__unicode__() - @property - def feed_title(self): - return self.newsletter.title - def get_subpath(self, obj): if isinstance(obj, NewsletterArticle): if obj.newsletter == self.newsletter: @@ -424,4 +429,13 @@ class NewsletterView(MultiView, FeedMultiViewMixin): 'categories': [tag.name for tag in obj.tags.all()] } defaults.update(kwargs or {}) - super(NewsletterView, self).add_item(feed, obj, defaults) \ No newline at end of file + super(NewsletterView, self).add_item(feed, obj, defaults) + + def get_feed(self, feed_type, extra_context, kwargs=None): + title = self.newsletter.title + + defaults = { + 'title': title + } + defaults.update(kwargs or {}) + return super(NewsletterView, self).get_feed(feed_type, extra_context, defaults) \ No newline at end of file diff --git a/contrib/penfield/utils.py b/contrib/penfield/utils.py index 591ac04..8103d9d 100644 --- a/contrib/penfield/utils.py +++ b/contrib/penfield/utils.py @@ -16,7 +16,8 @@ class FeedMultiViewMixin(object): feeds_enabled = True atom_feed = Atom1Feed rss_feed = Rss201rev2Feed - feed_description = '' + feed_title = None + feed_description = None list_var = 'objects' def page_view(self, func, page): @@ -52,9 +53,13 @@ class FeedMultiViewMixin(object): else: feed_type = 'atom' - feed = self.get_feed(feed_type, request, node, kwargs, reverse_name) current_site = Site.objects.get_current() + feed_kwargs = { + 'link': 'http://%s/%s/%s/' % (current_site.domain, node.get_absolute_url().strip('/'), reverse(reverse_name, urlconf=self, kwargs=kwargs).strip('/')) + } + feed = self.get_feed(feed_type, extra_context, feed_kwargs) + for obj in objects: kwargs = { 'link': 'http://%s/%s/%s/' % (current_site.domain, node.get_absolute_url().strip('/'), self.get_subpath(obj).strip('/')) @@ -67,15 +72,19 @@ class FeedMultiViewMixin(object): return inner - def get_feed(self, feed_type, request, node, kwargs, reverse_name): - title = self.feed_title - current_site = Site.objects.get_current() - link = 'http://%s/%s/%s/' % (current_site.domain, node.get_absolute_url().strip('/'), reverse(reverse_name, urlconf=self, kwargs=kwargs).strip('/')) - description = self.feed_description + def get_feed(self, feed_type, extra_context, kwargs=None): + defaults = { + 'description': '' + } + defaults.update(kwargs or {}) + if feed_type == 'rss': - return self.rss_feed(title, link, description) + return self.rss_feed(**defaults) + + if 'description' in defaults and defaults['description'] and 'subtitle' not in defaults: + defaults['subtitle'] = defaults['description'] - return self.atom_feed(title, link, description, subtitle=description) + return self.atom_feed(**defaults) def feed_patterns(self, object_fetcher, page, base_name): feed_name = '%s_feed' % base_name