Создание новостного канала для блога

Джанго имеет встроенную, которую можно использовать для динамического создания каналов RSS или Atom аналогичным образом для создания sitemaps с помощью платформы Sites Framework.

Создайте новый файл в каталоге приложения блога и назовите его feeds.py. Добавьте к нему следующие строки:

from django.contrib.syndication.views import Feed
from django.template.defaultfilters import truncatewords
from .models import Post

class LatestPostsFeed(Feed):
    title = 'My blog'
    link = '/blog/'
    description = 'New posts of my blog.'

    def items(self):
        return Post.published.all()[:5]

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

    def item_description(self, item):
        return truncatewords(item.body, 30)

Во-первых, мы создадим подкласс Feed. Атрибуты title, link и description соответствуют<title>, <link> и <description>элементов RSS, соответственно.

Метод Items() извлекает объекты, включаемые в канал. Мы извлекаем только последние пять публикаций для этого канала. Методы item_title() и item_description() получают каждый объект, возвращаемый items(), и возвращает заголовок и описание для каждого элемента. Для построения описания записи блога с первыми 30 словами используется встроенный фильтр truncatewords.

Теперь отредактируйте файл urls.py приложения блога, импортируйте только что созданную LatestPostsFeed и создавайте веб-канал в новом шаблоне URL-адреса:

from .feeds import LatestPostsFeed

urlpatterns = [
    # ...
    url(r'^feed/$', LatestPostsFeed(), name='post_feed'),
]

Откройте в вашем браузере страницу http://127.0.0.1:8000/blog/feed/ . Вы увидите RSS-канал, включющий последние пять записей блога:

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>My blog</title>
        <link>http://127.0.0.1:8000/blog/</link>
        <description>New posts of my blog.</description>
        <atom:link href="http://127.0.0.1:8000/blog/feed/" rel="self"/>
        <language>en-us</language>
        <lastBuildDate>Sun, 20 Sep 2015 20:40:55 -0000</lastBuildDate>
        <item>
            <title>Who was Django Reinhardt?</title>
            <link>http://127.0.0.1:8000/blog/2015/09/20/who-was-django-reinhardt/</link>
            <description>The Django web framework was named after the amazing jazz guitarist Django Reinhardt.</description>
            <guid>http://127.0.0.1:8000/blog/2015/09/20/who-was-django-reinhardt/</guid>
        </item>
        ...
    </channel>
</rss>

Если открыть один и тот же URL-адрес в клиенте RSS, можно будет видеть ваш канал с удобным интерфейсом.

Последним шагом является добавление ссылки подписки на веб-канал на боковую панель блога. Откройте шаблон blog/base.html и добавьте следующую строку в поле «количество записей» в sidebar div:

<p><a href="{% url "blog:post_feed" %}">Subscribe to my RSS feed</a></p>

Откройте в вашем браузере страницу http://127.0.0.1:8000/blog/ и взгляните на боковую панель:

results matching ""

    No results matching ""