tags:

views:

576

answers:

2

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 dobrych's solution is not quite applicable here because I was asking specifically about RSS not Atom feeds

+4  A: 

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.

dobrych
+4  A: 

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"
Similar approach will also work with Atom feeds by subclassing generator from Atom1Feed