2009-03-19 25 views
10

Cách "django-way" trong việc chỉ định hình ảnh kênh trong nguồn cấp dữ liệu rss là gì? Tôi có thể làm điều đó bằng tay bằng cách cuộn xml của riêng tôi, nhưng đã tìm kiếm một cách thích hợp để làm điều đó.Cách Django chỉ định hình ảnh kênh trong nguồn cấp dữ liệu rss

Sửa giải pháp dobrych là không hoàn toàn áp dụng ở đây bởi vì tôi đã yêu cầu cụ thể về RSS không Atom

Trả lời

9

Tìm thấy ngay cách thực hiện. Khi documentation mô tả, tôi cần thiết để tạo ra một máy phát thức ăn tùy chỉnh bằng cách subclassing từ Rss201rev2Feed và phương pháp trọng

 
add_root_elements() 

như thế này:

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

Cách tiếp cận tương tự cũng sẽ hoạt động với nguồn cấp dữ liệu Atom bằng cách tạo phân lớp máy phát từ Atom1Feed –

+0

Thêm url/tiêu đề/liên kết dưới dạng thuộc tính không chính xác và không hoạt động. Chúng phải là các phần tử XML. – AndiDog

+0

Nó được hiển thị bằng chrome (mime-type = application/xml), nhưng làm cách nào để hiển thị phần tử mới trong firefox hoặc ứng dụng khác (áp dụng một số kiểu cho Nguồn cấp RSS)? – Dineshkumar

4

tôi gợi ý để sử dụng django-atompub cho thế hệ Atom. Nó có lớp trừu tượng rất tốt với nhiều tùy chọn, do đó không có bất kỳ mã hacking XML nào, chỉ với mã Python cao cấp.

Ví dụ:

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

tôi đã sử dụng nó trong mã nguồn mở ứng dụng photoblog django tôi. Bạn có thể xem các ví dụ qua số bitbucket repo.

Hoàn thành feed generation code.

6

Đối RSS hợp lệ 2.0 bạn shoud sử dụng này:

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'} 
Các vấn đề liên quan