Django:我如何列出应用程序的所有可用RSS源?

时间:2018-01-20 18:50:19

标签: django rss

我知道如何使用Django创建新的RSS源。但是,我想提供一个页面,其中概述了网站提供的所有可用RSS源。

如何获取Django中可用的所有RSS源?不幸的是,我找不到任何答案。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是在代码中的某处创建一个列表并手动添加所有URL名称。只要有几个 - 我会推荐这种方法,因为这样你可以轻松地添加你可能想要渲染列表的更多元信息。它可以保持代码清洁。

许多RSS源的通用方法需要内省项目的URL配置,因为这是唯一可以获得信息的地方。您可以尝试创建一个解析url配置的视图,并将收集的信息添加到渲染上下文中。

未经测试的示例

from projectapp import urls
from django.views.generic import TemplateView
from django.contrib.syndication.views import Feed


def find_feed_url_names(patterns, feeds = []):
    """
    Recursively searches in all URLs for callbacks that are an instance of Feed

    Returns a list including all url names
    """
    for p in patterns:
        if p.callback:
            if isinstance(p.callback, Feed):
                # we found a route that points to an RSS or Atom feed.
                feeds.append(p.name)
        # if no callback is defined it is an include - search there, too
        else:  
            feeds = find_feed_url_names(p.url_patterns, feeds=feeds)  # recursion!
    return feeds


class ListRSSFeedView(TemplateView):
    template_name = 'foobar.html'

    def get_context_data(self, **kwargs):
      context = super().get_context_data(**kwargs)
      context['feed_url_names'] = find_feed_url_names(urls.url_pattern)
      return context

注意:迭代网址配置的代码受In Django, how do I introspect application urls?启发

这应该有用,因为Feed本身是可调用的,您不需要在其上调用to_view()

在您的模板中,您现在可以使用url template tag生成指向收集的网址的链接。