[英]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.