Django поставляется с фреймворком для создания каналов синдикации. С его помощью вы можете создавать каналы RSS или Atom, просто создав подкласс django.contrib.syndication.views.Feed .
Давайте создадим канал для последних комментариев, сделанных в приложении (см. Также главу Django — Comments Framework). Для этого давайте создадим myapp / feeds.py и определим наш фид (вы можете размещать ваши фиды в любом месте в своей структуре кода).
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 comments" link = "/drcomments/" description = "Updates on new comments on Dreamreal entry." 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})
-
В нашем ленте класса атрибуты title , link и description соответствуют стандартным элементам RSS <title> , <link> и <description> .
-
Метод items возвращает элементы, которые должны идти в ленте, как элемент item. В нашем случае последние пять комментариев.
-
Метод item_title , получит то, что будет заголовком для нашего элемента фида. В нашем случае заголовком будет имя пользователя.
-
Метод item_description , получит то, что будет в качестве описания для нашего элемента фида. В нашем случае сам комментарий.
-
Метод item_link создаст ссылку на полный элемент. В нашем случае это приведет вас к комментарию.
В нашем ленте класса атрибуты title , link и description соответствуют стандартным элементам RSS <title> , <link> и <description> .
Метод items возвращает элементы, которые должны идти в ленте, как элемент item. В нашем случае последние пять комментариев.
Метод item_title , получит то, что будет заголовком для нашего элемента фида. В нашем случае заголовком будет имя пользователя.
Метод item_description , получит то, что будет в качестве описания для нашего элемента фида. В нашем случае сам комментарий.
Метод item_link создаст ссылку на полный элемент. В нашем случае это приведет вас к комментарию.
Теперь, когда у нас есть наш канал, давайте добавим представление комментариев в views.py для отображения нашего комментария —
from django.contrib.comments import Comment def comment(request, object_pk): mycomment = Comment.objects.get(object_pk = object_pk) text = '<strong>User :</strong> %s <p>'%mycomment.user_name</p> text += '<strong>Comment :</strong> %s <p>'%mycomment.comment</p> return HttpResponse(text)
Нам также нужны некоторые URL в нашем myapp urls.py для отображения —
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 / вы получите наш канал —
Затем, нажав на одно из имен пользователей, вы получите: / myapp / comment / comment_id, как определено в нашем представлении комментариев ранее, и вы получите —
Таким образом, определение RSS-канала — это всего лишь вопрос подкласса класса Feed и обеспечения определения URL-адресов (один для доступа к каналу и один для доступа к элементам канала). Так же, как комментарий, это может быть прикреплено к любой модели в вашем приложении.