RSS-каналы, в случае новостных онлайн-ресурсов, представляют собой небольшие xml-файлы, обычно содержащие заголовок и заголовок новости.
Добавление RSS в Django
Создадим файл feeds.py в нашем модуле blog.
modules/blog/feeds.py
from django.contrib.syndication.views import Feed
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from modules.blog.models import Article
class LatestArticlesFeed(Feed):
title = 'Записки интернет-охотника'
link = '/articles/'
description = 'Здесь вы найдете полезные записи интернета'
language = 'ru'
def items(self):
return Article.objects.order_by('-created_at')[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return item.short_description
def item_link(self, item):
return reverse('article-detail', args=[item.slug])
Пояснения:
title
- заголовок ленты.link
- ссылка ленты.description
- описание ленты.language
- язык ленты.items
- возвращаем список статей сортируя их по времени в количестве 5 штук.item_title
- возвращаем заголовок статьи.item_description
- возвращаем краткое описание статьи.item_link
- возвращаем ссылку на статью.
Добавим ленту в urls.py
backend/urls.py
from django.contrib import admin
from django.urls import path, include
from django.contrib.sitemaps.views import sitemap
from django.conf.urls.static import static
from backend import settings
from modules.blog.feeds import LatestArticlesFeed
from modules.blog.sitemaps import ArticleSitemap
sitemaps = {
'articles': ArticleSitemap,
}
urlpatterns = [
path('ckeditor5/', include('django_ckeditor_5.urls')),
path('admin/', admin.site.urls),
path('s/', include('modules.system.urls')),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
path('feed/', LatestArticlesFeed()),
path('', include('modules.blog.urls')),
]
if settings.DEBUG:
urlpatterns = [path('__debug__/', include('debug_toolbar.urls'))] + urlpatterns
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Пояснения:
- Добавил
path('feed/', LatestArticlesFeed())
импортировав from modules.blog.feeds import LatestArticlesFeed
Проверим результат на сайте:

Отлично. У нас все получилось. Вид конечно не очень, потому что нам эту ленту необходимо добавить в rss каналы браузера, тогда вид преобразуется для удобочитаемости.