Django Rss Feed 添加图片到描述
Django Rss Feed add image to description
我正在尝试使用 Django rss 提要在 rss 查看器应用程序上查看提要。
我使用 django.contrib.syndication.views import Feed
创建 rss 提要
但它只有 3 个字段标题、描述和 link
我使用 from django.utils.feedgenerator import Rss201rev2Feed
添加了自定义字段
它生成额外的字段没有问题
但是当我用 rss 查看器打开它时,它不显示那些额外的字段或图像
我的问题是如何让这些额外的字段显示在应用程序中?
它不显示吗,因为应用程序只显示 标题、描述和 link,其他字段未处理?
那么我如何在描述中嵌入图片和其他字段,以便显示 (最重要的是图片显示)?
我已经检查了很多次文档,但似乎还是不正确。
这里是 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,}
我正在为 reader 应用程序使用 Rss Savvy
<image></image>
不是按照 RSS 规范 here
. But it is a valid element of channel
规定的项目的标准元素。无论如何,您可以通过多种方式将图像添加到 Feed。喜欢:
使用附件
如上所述here
, you can use enclosures to add image in feed. Django Feed Framework also provides add_enclosures()
我们可以使用的功能。以下是基于此的两种可能的解决方案:
第一个解决方案(图像存储在 Django 中)
我假设您在模型中有一个像这样的图像字段:
class Check_Ads_One(models.Model):
image = models.ImageField()
然后像这样更新 LatestPostsFeed
class:
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]))]
第二种解决方案(图像未存储在 Django 中)
如果您要存储图片链接而不是实际图片,请使用以下方法:
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)]
CDATA
中的图片信息(备选方案)
您可以在描述中添加 CDATA
标签并在其中添加图片:
def item_description(self, item):
return '<![CDATA[\n{} <img src="{}" alt="{}">\n]>'.format(item.paragraph, item.image, item.title)
更多信息可以在这里找到 Whosebug Answer
我正在尝试使用 Django rss 提要在 rss 查看器应用程序上查看提要。
我使用 django.contrib.syndication.views import Feed
创建 rss 提要
但它只有 3 个字段标题、描述和 link
我使用 from django.utils.feedgenerator import Rss201rev2Feed
它生成额外的字段没有问题
但是当我用 rss 查看器打开它时,它不显示那些额外的字段或图像
我的问题是如何让这些额外的字段显示在应用程序中?
它不显示吗,因为应用程序只显示 标题、描述和 link,其他字段未处理?
那么我如何在描述中嵌入图片和其他字段,以便显示 (最重要的是图片显示)?
我已经检查了很多次文档,但似乎还是不正确。
这里是 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,}
我正在为 reader 应用程序使用 Rss Savvy
<image></image>
不是按照 RSS 规范 here
. But it is a valid element of channel
规定的项目的标准元素。无论如何,您可以通过多种方式将图像添加到 Feed。喜欢:
使用附件
如上所述here
, you can use enclosures to add image in feed. Django Feed Framework also provides add_enclosures()
我们可以使用的功能。以下是基于此的两种可能的解决方案:
第一个解决方案(图像存储在 Django 中)
我假设您在模型中有一个像这样的图像字段:
class Check_Ads_One(models.Model):
image = models.ImageField()
然后像这样更新 LatestPostsFeed
class:
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]))]
第二种解决方案(图像未存储在 Django 中)
如果您要存储图片链接而不是实际图片,请使用以下方法:
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)]
CDATA
中的图片信息(备选方案)
您可以在描述中添加 CDATA
标签并在其中添加图片:
def item_description(self, item):
return '<![CDATA[\n{} <img src="{}" alt="{}">\n]>'.format(item.paragraph, item.image, item.title)
更多信息可以在这里找到 Whosebug Answer