Django-在rss feed中指定通道图像的方式

时间:2009-03-19 02:11:27

标签: python django rss

在rss feed中指定频道图像的“django-way”是什么?我可以通过滚动我自己的xml手动完成,但是正在寻找一种正确的方法。

修改的 dobrych的解决方案在这里不太适用,因为我专门询问RSS而不是Atom提要

3 个答案:

答案 0 :(得分:10)

找到正确的方式。正如documentation所描述的那样,我需要通过从 Rss201rev2Feed 继承子类并重写方法来创建自定义Feed生成器

add_root_elements()
像这样:

class RssFooFeedGenerator(Rss201rev2Feed):
    def add_root_elements(self, handler):
        super(RssFooFeedGenerator, self).add_root_elements(handler)
        handler.addQuickElement(u"image", '',
            {
                 'url': u"http://www.example.com/images/logo.jpg",
                 'title': u"Some title",
                 'link': u"http://www.example.com/", 
             })     

class RssFooFeed(Feed):
    feed_type = RssFooFeedGenerator
    title = u"Foo items"
    link = u"http://www.example.com/"
    description = u"Some description"

答案 1 :(得分:7)

对于有效的RSS 2.0,您应该使用:

class ImageRssFeedGenerator(Rss201rev2Feed):
    def add_root_elements(self, handler):
        super(ImageRssFeedGenerator, self).add_root_elements(handler)
        handler.startElement(u'image', {})
        handler.addQuickElement(u"url", self.feed['image_url'])
        handler.addQuickElement(u"title", self.feed['title'])
        handler.addQuickElement(u"link", self.feed['link'])
        handler.endElement(u'image')

class LastPublishedPromiseFeed(Feed):
    link = 'http://www.example.com'
    feed_type = ImageRssFeedGenerator

    def feed_extra_kwargs(self, obj):
        return {'image_url': self.link + '/image.jpg'}

答案 2 :(得分:4)

我建议将django-atompub用于Atom Feed生成。 它有很好的类抽象,有很多选项,所以没有任何XML黑客攻击,只有高级Python代码。

示例:

# Define feed class
class StreamFeed(Feed):
    ... [snipped]
    def item_links(self, item):
        return [{'rel': 'enclosure', 'href': item.file.url, 'length': item.file.size, 'type': item.mime.name},
        {'rel': 'alternate', 'href': full_url(item.get_absolute_url())}]

我在我的开源photoblog django app中使用它。您可以通过bitbucket repo查看示例。

完成feed generation code