From f7ddb23b308a6b409ace28e0517e3a67f5329ce5 Mon Sep 17 00:00:00 2001 From: Stephen Burrows Date: Fri, 3 Jun 2011 12:33:14 -0400 Subject: [PATCH] Tweaked FeedView to more correctly generate links vs feed urls. --- philo/contrib/penfield/models.py | 2 +- philo/contrib/syndication/models.py | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/philo/contrib/penfield/models.py b/philo/contrib/penfield/models.py index c22dcfc..39414d8 100644 --- a/philo/contrib/penfield/models.py +++ b/philo/contrib/penfield/models.py @@ -285,7 +285,7 @@ class BlogView(FeedView): def inner(request, extra_context=None, *args, **kwargs): obj = self.get_object(request, *args, **kwargs) - feed = self.get_feed(obj, request, reverse_name, feed_type) + feed = self.get_feed(obj, request, reverse_name, feed_type, *args, **kwargs) items, extra_context = get_items(request, extra_context=extra_context, *args, **kwargs) self.populate_feed(feed, items, request) diff --git a/philo/contrib/syndication/models.py b/philo/contrib/syndication/models.py index d08a715..aa73ec8 100644 --- a/philo/contrib/syndication/models.py +++ b/philo/contrib/syndication/models.py @@ -70,11 +70,10 @@ class FeedView(MultiView): if self.feeds_enabled: suffixes = [(self.feed_suffix, None)] + [(slug, slug) for slug in registry] for suffix, feed_type in suffixes: - feed_reverse_name = "%s_%s" % (reverse_name, suffix) - feed_view = http_not_acceptable(self.feed_view(get_items_attr, feed_reverse_name, feed_type)) + feed_view = http_not_acceptable(self.feed_view(get_items_attr, reverse_name, feed_type)) feed_pattern = r'%s%s%s$' % (base, "/" if base and base[-1] != "^" else "", suffix) urlpatterns += patterns('', - url(feed_pattern, feed_view, name=feed_reverse_name), + url(feed_pattern, feed_view, name="%s_%s" % (reverse_name, suffix)), ) urlpatterns += patterns('', url(r"%s$" % base, self.page_view(get_items_attr, page_attr), name=reverse_name) @@ -90,7 +89,7 @@ class FeedView(MultiView): Returns a view function that renders a list of items as a feed. :param get_items_attr: A callable or the name of a callable on the :class:`FeedView` that will return a (items, extra_context) tuple when called with view arguments. - :param reverse_name: The name which can be used reverse this feed using the :class:`FeedView` as the urlconf. + :param reverse_name: The name which can be used reverse the page for this feed using the :class:`FeedView` as the urlconf. :param feed_type: The slug used to render the feed class which will be used by the returned view function. :returns: A view function that renders a list of items as a feed. @@ -100,7 +99,7 @@ class FeedView(MultiView): def inner(request, extra_context=None, *args, **kwargs): obj = self.get_object(request, *args, **kwargs) - feed = self.get_feed(obj, request, reverse_name, feed_type) + feed = self.get_feed(obj, request, reverse_name, feed_type, *args, **kwargs) items, xxx = get_items(request, extra_context=extra_context, *args, **kwargs) self.populate_feed(feed, items, request) @@ -174,13 +173,13 @@ class FeedView(MultiView): raise HttpNotAcceptable return feed_type - def get_feed(self, obj, request, reverse_name, feed_type=None): + def get_feed(self, obj, request, reverse_name, feed_type=None, *args, **kwargs): """ Returns an unpopulated :class:`django.utils.feedgenerator.DefaultFeed` object for this object. :param obj: The object for which the feed should be generated. :param request: The current request. - :param reverse_name: The name which can be used to reverse the feed's URL. + :param reverse_name: The name which can be used to reverse the URL of the page corresponding to this feed. :param feed_type: The slug used to register the feed class that will be instantiated and returned. :returns: An instance of the feed class registered as ``feed_type``, falling back to :attr:`feed_type` if ``feed_type`` is ``None``. @@ -193,7 +192,7 @@ class FeedView(MultiView): feed_type = self.get_feed_type(request, feed_type) node = request.node - link = node.get_absolute_url(with_domain=True, request=request, secure=request.is_secure()) + link = node.construct_url(self.reverse(reverse_name, args=args, kwargs=kwargs), with_domain=True, request=request, secure=request.is_secure()) feed = feed_type( title = self.__get_dynamic_attr('title', obj), @@ -203,7 +202,7 @@ class FeedView(MultiView): language = settings.LANGUAGE_CODE.decode(), feed_url = add_domain( current_site.domain, - self.__get_dynamic_attr('feed_url', obj) or node.construct_url(node._subpath, with_domain=True, request=request, secure=request.is_secure()), + self.__get_dynamic_attr('feed_url', obj) or node.construct_url(self.reverse("%s_%s" % (reverse_name, registry.get_slug(feed_type)), args=args, kwargs=kwargs), with_domain=True, request=request, secure=request.is_secure()), request.is_secure() ), author_name = self.__get_dynamic_attr('author_name', obj), -- 2.20.1