Django - RSS

Django est livré avec un framework de génération de flux de syndication. Avec lui, vous pouvez créer des flux RSS ou Atom simplement en sous-classantdjango.contrib.syndication.views.Feed class.

Créons un flux pour les derniers commentaires effectués sur l'application (voir également le chapitre Django - Commentaires Framework). Pour cela, créons un myapp / feeds.py et définissons notre flux (vous pouvez placer vos classes de flux où vous le souhaitez dans votre structure de code).

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})
  • Dans notre classe d'aliments, title, link, et description les attributs correspondent au RSS standard <title>, <link> et <description> éléments.

  • le items, renvoie les éléments qui doivent figurer dans le flux en tant qu'élément d'élément. Dans notre cas, les cinq derniers commentaires.

  • le item_titleméthode, obtiendra ce qui servira de titre à notre élément de fil. Dans notre cas, le titre sera le nom d'utilisateur.

  • le item_descriptionméthode, obtiendra ce qui servira de description pour notre élément de fil. Dans notre cas, le commentaire lui-même.

  • le item_linkLa méthode créera le lien vers l'élément complet. Dans notre cas, cela vous amènera au commentaire.

Maintenant que nous avons notre flux, ajoutons une vue de commentaire dans views.py pour afficher notre commentaire -

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)

Nous avons également besoin de quelques URL dans notre myapp urls.py pour le mappage -

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'),
)

En accédant à / myapp / latest / comments / vous obtiendrez notre flux -

Ensuite, en cliquant sur l'un des noms d'utilisateur vous amènera à: / myapp / comment / comment_id comme défini dans notre vue des commentaires avant et vous obtiendrez -

Ainsi, la définition d'un flux RSS est juste une question de sous-classer la classe Feed et de s'assurer que les URL (une pour accéder au flux et une pour accéder aux éléments du flux) sont définies. Juste comme commentaire, cela peut être attaché à n'importe quel modèle de votre application.