Учебники

Джанго — RSS

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 / вы получите наш канал —

Django RSS Пример

Затем, нажав на одно из имен пользователей, вы получите: / myapp / comment / comment_id, как определено в нашем представлении комментариев ранее, и вы получите —

Django RSS перенаправленная страница

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