Создание новостного канала для блога
Джанго имеет встроенную, которую можно использовать для динамического создания каналов 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/ и взгляните на боковую панель: