Django feed syndication и yandex:full-text

3 комментария

Для генерации фидов в django используется модуль syndication feeds. Иногда бывает необходимо добавить собственные теги в новостную ленту. Например, для экспорта в «Яндекс Новости», необходимо передать полный текст статьи внутри тега <yandex:full-text>.

Создадим класс CustomFeedGenerator и добавим в него метод add_item_elements.

from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Rss201rev2Feed

from blog import models

class CustomFeedGenerator(Rss201rev2Feed):
    def add_item_elements(self, handler, item):
        super(CustomFeedGenerator, self).add_item_elements(handler, item)
        # Добавление кастомного тега в RSS-ленту
        handler.addQuickElement(u"yandex:full-text", item["content"])

class CustomFeed(Feed):
    # Задаем кастомный генератор ленты
    feed_type = CustomFeedGenerator

    #  Здесь должны быть описаны параметры фида
    # (заголовок, описание, ссылка и т.д.)

    def items(self):
        return models.Article.public.order_by('-published')

    def item_extra_kwargs(self, item):
        return {
            "content": item.html(),
        }

Функция item_extra_kwargs позволяет добавить к элементу фида дополнительные поля. В данном случае, мы добавили полный текст статьи в словарь item с ключом content. Метод item.html() находится в модели Article и возвращает html-представление текста статьи, написанного в markdown.

Комментарии к статье: 3

Подождите, загружаются комментарии...

Возможность комментировать эту статью отключена автором. Возможно, во всем виновата её провокационная тематика или большое обилие флейма от предыдущих комментаторов.

Если у вас есть вопросы по содержанию статьи, рекомендуем вам обратиться за помощью на наш форум.