Django - RSS
Django viene fornito con un framework per la generazione di feed di syndication. Con esso puoi creare feed RSS o Atom semplicemente creando sottoclassidjango.contrib.syndication.views.Feed class.
Creiamo un feed per gli ultimi commenti fatti sull'app (vedi anche Django - capitolo Framework dei commenti). Per questo, creiamo un myapp / feeds.py e definiamo il nostro feed (puoi inserire le tue classi di feed ovunque tu voglia nella struttura del codice).
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})
Nella nostra classe di feed, title, link, e description gli attributi corrispondono all'RSS standard <title>, <link> e <description> elementi.
Il itemsrestituisce gli elementi che dovrebbero essere inseriti nel feed come elemento elemento. Nel nostro caso gli ultimi cinque commenti.
Il item_titlemetodo, otterrà quello che andrà come titolo per il nostro elemento del feed. Nel nostro caso il titolo sarà il nome utente.
Il item_descriptionmetodo, otterrà ciò che andrà come descrizione per il nostro elemento del feed. Nel nostro caso il commento stesso.
Il item_linkil metodo creerà il collegamento all'elemento completo. Nel nostro caso ti porterà al commento.
Ora che abbiamo il nostro feed, aggiungiamo una visualizzazione commenti in views.py per visualizzare il nostro commento -
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)
Abbiamo anche bisogno di alcuni URL nel nostro myapp urls.py per la mappatura -
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'),
)
Quando accedi a / myapp / latest / comments / otterrai il nostro feed -
Quindi fare clic su uno dei nomi utente ti porterà a: / miaapp / comment / comment_id come definito in precedenza nella nostra vista commenti e otterrai:
Pertanto, la definizione di un feed RSS è solo una questione di sottoclassare la classe Feed e assicurarsi che gli URL (uno per accedere al feed e uno per accedere agli elementi del feed) siano definiti. Proprio come un commento, questo può essere allegato a qualsiasi modello nella tua app.