English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

RSS Django

Django имеет фреймворк для генерации агрегированных фидов. С его помощью вы можете создать RSS или Atom, просто наследуя класс django.contrib.syndication.views.Feed.

Давайте создадим приложение с подпиской на источник.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ru.oldtoolbag.com
# Date : 2020-08-08
from django.contrib.syndication.views import Feed
 from django.contrib.comments import Comment
 from django.core.urlresolvers import reverse
 class DreamrealCommentsFeed(Feed):
    title = "Комментарии Dreamreal's"
    link = "/drcomments/"
    description = "Обновления о новых комментариях в записи Dreamreal."
    def items(self):
       return Comment.objects.all().order_by("-submit_date")[:5]
 
    def item_title(self, item):
       return item.user_name
 
    def item_description(self, item):
       return item.comment
 
    def item_link(self, item):
       return reverse('comment', kwargs = {'object_pk': item.pk})

В классе feed, атрибуты title, link и description соответствуют стандартным элементам RSS <title>, <link> и <description>.

Метод entries возвращает элементы item, которые должны попасть в фид. В нашем примере это последние пять комментариев.

Теперь у нас есть фид, и мы добавляем комментарии в вид views.py, чтобы отобразить наши комментарии−

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ru.oldtoolbag.com
# Date : 2020-08-08
from django.contrib.comments import Comment
 def comment(request, object_pk):
    mycomment = Comment.objects.get(object_pk = object_pk)
    text = '<strong>Пользователь:</strong> %s <p>'%mycomment.user_name</p>
    text += '<strong>Комментарий:</strong> %s <p>'%mycomment.comment</p>
    return HttpResponse(text)

Мы также需要有 некоторые URL-адреса, которые нужно маппинг в myapp urls.py −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ru.oldtoolbag.com
# Date : 2020-08-08
from myapp.feeds import DreamrealCommentsFeed
 from django.conf.urls import patterns, url
 urlpatterns += patterns('',
    url(r'^latest/comments/', DreamrealCommentsFeed()),
    url(r'^comment/(?P\w+)/', 'comment', name = 'comment'),
 )

При посещении /myapp/latest/comments/ вы получите feed −

При нажатии на любое имя пользователя вы получите: /myapp/comment/comment_id перед определением вашего комментария представления, вы получите −

Таким образом, определение RSS-источника как подкласса класса Feed и обеспечение того, чтобы эти URL (один для доступа к feed, один для доступа к элементам feed) были определены. Как отмечено в комментариях, это может быть связано с любым моделью вашего приложения.