簡體   English   中英

在 rss 提要中指定頻道圖像的 Django 方式

[英]Django-way of specifying channel image in rss feed

在 rss 提要中指定頻道圖像的“django 方式”是什么? 我可以通過滾動我自己的 xml 來手動完成,但正在尋找一種正確的方法。

編輯dobrych 的解決方案在這里不太適用,因為我專門詢問 RSS 而不是 Atom 提要

找到了正確的做法。 文檔所述,我需要通過從Rss201rev2Feed 繼承和覆蓋方法來創建自定義提要生成器

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"

對於有效的 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'}

我建議使用django-atompub來生成 Atom 提要。 它有非常好的 Class 抽象和很多選項,所以沒有任何 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())}]

我在我的開源照片博客 django 應用程序中使用了它。 您可以通過bitbucket repo查看示例。

完整的提要生成代碼

暫無
暫無

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

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