Django - RSS

Django viene con un marco de generación de feeds de distribución. Con él puede crear feeds RSS o Atom simplemente subclasificandodjango.contrib.syndication.views.Feed class.

Creemos una fuente para los últimos comentarios hechos en la aplicación (también vea el capítulo Django - Marco de comentarios). Para esto, creemos un myapp / feeds.py y definamos nuestro feed (puede colocar sus clases de feeds en cualquier lugar que desee en la estructura de su código).

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})
  • En nuestra clase de piensos, title, linky description los atributos corresponden al RSS estándar <title>, <link> y <description> elementos.

  • los items, devuelve los elementos que deben ir en el feed como elemento item. En nuestro caso los últimos cinco comentarios.

  • los item_title, obtendrá lo que se utilizará como título para nuestro elemento de feed. En nuestro caso, el título será el nombre de usuario.

  • los item_descriptionmétodo, obtendrá lo que irá como descripción para nuestro elemento de alimentación. En nuestro caso el comentario en sí.

  • los item_linkEl método creará el enlace al elemento completo. En nuestro caso, llegará al comentario.

Ahora que tenemos nuestro feed, agreguemos una vista de comentarios en views.py para mostrar nuestro comentario:

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)

También necesitamos algunas URL en nuestro myapp urls.py para el mapeo:

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

Al acceder a / myapp / latest / comments / obtendrá nuestro feed -

Luego, hacer clic en uno de los nombres de usuario lo llevará a: / myapp / comment / comment_id como se definió en nuestra vista de comentarios antes y obtendrá -

Por lo tanto, definir una fuente RSS es solo una cuestión de subclasificar la clase Feed y asegurarse de que las URL (una para acceder a la fuente y otra para acceder a los elementos de la fuente) estén definidas. Como comentario, esto se puede adjuntar a cualquier modelo en su aplicación.