Python 从Django Templatetags中的RSS源返回项目

Python 从Django Templatetags中的RSS源返回项目,python,django,django-templates,Python,Django,Django Templates,我是Django noob 我试图使用templatetags(带有classytags)将RSS提要项添加到django模板中 这是我的密码: from django import template from classytags.core import Tag import feedparser register = template.Library() class ExampleTag(Tag): name = 'exampletag' def render_tag(self,

我是Django noob

我试图使用templatetags(带有classytags)将RSS提要项添加到django模板中

这是我的密码:

from django import template
from classytags.core import Tag
import feedparser

register = template.Library()

class ExampleTag(Tag):
name = 'exampletag'
    def render_tag(self, context):
        raw_feed = "example.com/feed.rss"

        feed = feedparser.parse(raw_feed)
        entrylist = {}

        for entry in feed.entries:
            entrylist[entry.title]


    return entrylist

register.tag(ExampleTag)
然后,在模板中,我可以使用以下命令调用ExampleTag:

{% load my_tag %}
{% exampletag %}
这将导致在/u“提要中的第一个条目”处出现键错误

如果我将代码更改为附加到列表,则模板将无错误地呈现,并且整个结构化列表将以单个字符串输出

这就是我想做的:

{% load my_tag %}
{% for item in exampletag %}
<p> {{ item }} </p>
{% endfor %}
{%load my_tag%}
{exampletag%中的项的%s}
{{item}}

{%endfor%}
但是,这只是默默地失败(显然我没有将可交互对象传递给模板)

有什么想法吗?这是一个好办法吗


提前感谢。

此代码看起来非常可疑:

    for entry in feed.entries:
        entrylist[entry.title]
不应该是这样的吗

    for entry in feed.entries:
        entrylist[entry.title] = entry     # or some value
现在,您正试图索引到一个空字典中,因此得到了一个
KeyError
异常

但我还是不知道你想做什么。这里有两个可能让你开始的想法

想法一:看起来你应该写一篇文章

类似于(未经测试):

以及在
feed_entries.html

{% for item in items %}
<p> {{ item }} </p>
{% endfor %}
然后在模板中,您必须“捕获”此标记的结果(项目列表):

{%feed\u条目作为项目%}
{items%%中的项的%s}
{{item}}

{%endfor%}
但这意味着您必须在每个模板中复制“as”和for循环内容。如果在许多模板中使用包含标记,则可以节省键入和维护。但是,如果您希望在每个模板中以不同的方式呈现列表,那么它将更加灵活。假设您希望它位于一个标签的
列表中,但位于另一个标签的
列表中

{% for item in items %}
<p> {{ item }} </p>
{% endfor %}
{% load feed_tags %}
...
<p>Here are the latest entries:</p>
{% feed_entries %}
...
@register.assignment_tag
def feed_entries():
    return feedparser.parse('example.rss')
{% feed_entries as items %}
{% for item in items %}
    <p>{{ item }}</p>
{% endfor %}