<image></image>
не является стандартным элементом Товаров согласно указанной в спецификации RSS here
. Но это действительный элемент channel
. В любом случае, есть несколько способов добавить изображение в канал. Например:
Использование вложений
Как указано here
, вы можете использовать корпуса для добавления изображения в канал. Django Feed Framework также предоставляет функцию add_enclosures()
, которую мы можем использовать. Вот два возможных решения, основанные на этом:
Первое решение (изображение хранится в Django)
Я предполагаю, что у вас есть поле изображения в этой модели:
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]))]
Второе решение (изображение не сохраняется в 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 return '<![CDATA[\n{} <img src="{}" alt="{}">\n]>'.format(item.paragraph, item.image, item.title)
Более подробную информацию можно найти в этом Ответе StackOverflow