簡體   English   中英

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

[英]Django: How can I list all available RSS feeds of app?

我知道如何使用Django創建新的RSS feed。 但是,我想提供一個頁面,概述該網站提供的所有可用RSS feed。

如何獲得Django中可用的所有RSS提要? 不幸的是,我找不到任何答案。

一個簡單的解決方案是僅在代碼中的某個位置創建一個列表,然后手動添加所有URL名稱。 只要只有幾個-我會推薦這種方法,因為這樣您就可以輕松地添加可能需要呈現列表的其他元信息。 而且它可以使您的代碼保持干凈。

數十種RSS feed的通用方法需要對項目的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

注意:迭代url配置的代碼受In Django的啟發,如何檢查應用程序的url?

這應該起作用,因為Feed本身是可調用的,並且您不需要在其上調用to_view()

現在,您可以在模板中使用url模板標記生成指向所收集URL的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM