Django Rss Feed将图像添加到描述中

问题描述 投票:0回答:1

我正在尝试使用Django rss供稿在rss查看器应用程序上查看供稿。

我从django.contrib.syndication.views import Feed用于创建RSS供稿

但是它只有3个字段,标题,描述和链接我通过使用django.utils.feedgenerator import Rss201rev2Feed

添加了自定义字段

并且它会生成没有问题的多余字段

enter image description here

但是当我使用rss查看器打开它时,它不会显示那些多余的字段或图像

enter image description here

我的问题是如何使那些多余的字段显示在应用程序中?

它不会显示,因为应用仅显示标题,描述和链接,而其他字段未处理?

所以我如何在描述中嵌入图像和其他字段,以便它显示(最重要的是图像显示]

我看过很多次文档似乎无法正确处理。

这是Django应用中的查看代码

class CustomFeedGenerator(Rss201rev2Feed):
    def add_item_elements(self, handler, item):
        super(CustomFeedGenerator, self).add_item_elements(handler, item)
        handler.addQuickElement(u"image", item['image'])
        handler.addQuickElement(u"seller_name", item['seller_name'])
        handler.addQuickElement(u"price", item['price'])

class LatestPostsFeed(Feed):
    title = "www.marktplaats.nl"
    link = "/feeds/"
    description = "Updates on changes and additions to posts published in the starter."

    feed_type = CustomFeedGenerator

    def items(self):
        return Check_Ads_One.objects.order_by('title')[:5]

    def item_title(self, item):
        return item.title

    def item_description(self, item):
        return item.paragraph

    def item_link(self, item):
        return item.prod_link

    def item_extra_kwargs(self, item):

        return { 'image': item.image_link,
                'seller_name' : item.seller_name,
                'price': item.price,}

我正在使用Rss Savvy作为阅读器应用程序

python django rss rss-reader rss2
1个回答
1
投票
根据RSS规范<image></image>

here不是项的标准元素。但这是here的有效元素。无论如何,您可以通过多种方式将图像添加到Feed中。喜欢:

使用附件

channel所述,您可以使用附件在Feed中添加图像。 Django Feed Framework还提供了channel函数供我们使用。这是基于此的两个可能的解决方案:

第一个解决方案(图像存储在Django中)

我假设您在模型中具有这样的图像字段:

here

然后像这样更新here类:

add_enclosures()

第二个解决方案(图像未存储在Django中)

如果存储图像的链接而不是实际的图像,请使用以下方法:

add_enclosures()

第二解决方案(在class Check_Ads_One(models.Model): image = models.ImageField() 中添加图像信息)

您可以在说明中添加LatestPostsFeed标签并在其中添加图片:

class LatestPostsFeed(Feed):
    title = "www.marktplaats.nl"
    link = "/feeds/"
    description = "Updates on changes and additions to posts published in the starter."

    feed_type = feedgenerator.Rss201rev2Feed

    # Rest of the code

    def get_object(self, request, *args, **kwargs):
        self.request = request
        return super(LatestPostsFeed, self).get_object(request, *args, **kwargs) 

    def get_image_url(self, url):
        return self.request.build_absolute_uri('/media{}'.format(url))

    def item_enclosures(self, item):
        return [feedgenerator.Enclosure(self.get_image_url(item.image.url), str(item.image.size), 'image/{}'.format(item.image.name.split('.')[-1]))]

可以在此import urllib class LatestPostsFeed(Feed): title = "www.marktplaats.nl" link = "/feeds/" description = "Updates on changes and additions to posts published in the starter." feed_type = feedgenerator.Rss201rev2Feed # Rest of the code def get_size_and_type_of_image(self, image_url): # This method can be moved to models.py, and on save of `Check_Ads_One` it will calculate the size and type of image from url and store in DB. Then it will much optimized solution data = urllib.urlopen(image_url) return data['Content-Length'], data['Content-Type'] def item_enclosures(self, item): content_length, content_type = self.get_size_and_type_of_image(item.image) return [feedgenerator.Enclosure(item.image, content_length, content_type)] 中找到更多信息

© www.soinside.com 2019 - 2024. All rights reserved.