Django 5 для начинающих

Прогресс по курсу:  9/1004

11.7 Добавление RSS ленты для блога
1 из 1 шага пройден

В этом разделе мы рассмотрим RSS способ передачи информации, и расскажем как в Django добавить RSS ленту для нашего блога. 

RSS: что это такое

RSS – это компонент, с помощью которого контент ресурса выводится в специально структурированной форме в виде ленты новостей со ссылкой на полную версию в первоисточнике.

Есть несколько версий, как расшифровывается аббревиатура RSS:

  • Really Simple Syndication – очень простое распространение информации;
  • Rich Site Summary – обогащенная (полноценная) сводка сайта.

Независимо от выбранного варианта перевода, смысл этого понятия не меняется. С момента, когда появилась RSS лента новостей, просмотр контента любимых сайтов заметно упростился. Теперь не надо заходить по несколько раз в день на одни и те же ресурсы, чтобы узнать, какую информацию они недавно опубликовали. Все, что вам интересно, появится в вашей персональной новостной ленте (обратите внимание, что для этого предварительно оформляется RSS-подписка на контент интересующих вас сайтов). RSS-файл, в котором содержится описание или анонс новости со ссылкой на полную версию, обычно записывается в формате rss или xml. Таким файлам присваивается соответствующая тематическая категория, согласно которой они сортируются в ленте.

Как работает RSS-сервис

RSS-лента формируется так:

  1. После появления на сайте какой-либо информации специальный скрипт заносит в обновляемый RSS-файл метаданные и краткое описание этой новости.

  2. Далее указанный файл считывает программный или онлайн-RSS-агрегатор, который и передает информацию о выходе новых материалов на сайте подписчикам соответствующего канала.

  3. Чтобы прочитать новости в ленте, пользователь должен использовать RSS-ридер.

 

 В Django можно очень легко добавить RSS ленту для вашего сайта. Приступим к реализации.

 

Создание класса RSS ленты

Нам необходимо создать класс, который будет представлять RSS ленту на сайте. Для этого необходимо наследоваться от класса django.contrib.syndication.views.Feed.

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

from django.contrib.syndication.views import Feed
from django.urls import reverse
from .models import Post

class LatestPostFeed(Feed):
    title = "Мой блог на Django - последние записи"
    link = "/feeds/"
    description = "Новые записи на моем сайте."

    def items(self):
        return Post.objects.order_by('-update')[:5]

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

    def item_description(self, item):
        return item.description

    def item_link(self, item):
        return reverse('post_detail', args=[item.slug])

В этом классе мы определяем основные атрибуты ленты, такие как заголовок (title), описание (description) и адрес (link). Метод items() возвращает последние 5 статей, отсортированные по дате публикации. Методы item_title(), item_description() и item_link() возвращают заголовок, описание и ссылку на записи.

После того, как мы создали класс для RSS ленты, вам необходимо создать URL-адрес, по которому лента будет доступна.

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

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from apps.blog.feeds import LatestPostFeed

urlpatterns = [
    path('ckeditor/', include('ckeditor_uploader.urls')),
    path('admin/', admin.site.urls),
    path('feeds/latest/', LatestPostFeed(), name='latest_post_feed'), # New
    path('', include('apps.blog.urls')),
    path('', include('apps.accounts.urls')),
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += [path('__debug__/', include('debug_toolbar.urls'))]

 

И последним делом добавим ссылку на ленты в шаблон, для этого в файл sidebar.html добавим следующий код в самый низ:

<a href="{% url 'latest_post_feed' %}">Подписаться на RSS ленту</a>

 

Запустим сервер и проверим работу. Мы видим что появилась ссылка на ленту.

Попробуем перейти на нее и мы увидим что у нас открылась RSS лента нашего блога.

Чтобы сделать ее читаемой, нам будет необходим любой RSS ридер. Попробуем добавить ленту.

Мы видим что наши записи успешно добавились.

И мы также можем открыть любую запись и прочитать ее.

Подписываясь на RSS-каналы всех интересных сайтов, пользователь сможет смотреть анонсы всех статей в хронологическом порядке и переходить только к тем, которые ему интересны. Так читатель сможет сформировать собственную ленту новостей всех сайтов, которые читает.


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

Где взять его не понятно если честно (
Чтобы сделать ее читаемой, нам будет необходим любой RSS ридер. Попробуем добавить ленту.

@No_Name, например https://www.google.com/search?q=rss+reader .

Изменен Дмитрий Селезнев