Django-way of specifying channel image in rss feed

前端 未结 3 2102
北荒
北荒 2021-02-08 12:19

What is the \"django-way\" of specifying channel image in rss feed? I can do it manually by rolling my own xml, but was looking for a proper way of doing it.

Edit

相关标签:
3条回答
  • 2021-02-08 12:30

    I suggesting to use django-atompub for Atom feed generation. It has very nice Class abstraction with lots of options, so no any XML hacking, high-level Python code only.

    Example:

    # 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())}]
    

    I used it in my open source photoblog django app. You can see examples via bitbucket repo.

    Complete feed generation code.

    0 讨论(0)
  • 2021-02-08 12:38

    Found the right way of doing it. As the documentation describes, I needed to create a custom feed generator by subclassing from Rss201rev2Feed and overriding method

    add_root_elements()
    

    like this:

    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"
    
    0 讨论(0)
  • 2021-02-08 12:48

    For valid RSS 2.0 you shoud use this:

    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'}
    
    0 讨论(0)
提交回复
热议问题