2010-07-20 10 views
1

Je souhaite générer un flux des dernières entrées d'un article de blog sous un tag particulier. J'ai utilisé le django-tagging. Comment puis-je faire ceci? Voici comment je défini mon LatestEntriesFeeddjango génère un flux pour un tag particulier

from django.core.exceptions import ObjectDoesNotExist 
from django.utils.feedgenerator import Atom1Feed 
from django.contrib.sites.models import Site 
from django.contrib.syndication.feeds import Feed 
from articles.models import Entry 

current_site = Site.objects.get_current() 

class LatestEntriesFeed(Feed): 
    title = 'Latest Entries for %s' % current_site 
    link = '/feeds/latest/' 
    description = 'Latest entries posted.' 

    def items(self): 
     return Entry.live.all()[:100] 

    def item_pubdate(self, item): 
     return item.pub_date 

    def item_guid(self, item): 
     return "tag:%s,%s:%s" % (current_site.domain, 
      item.pub_date.strftime('%Y-%m-%d'), 
      item.get_absolute_url()) 

Répondre

1

Changer votre méthode items au folowing:

from tagging.models import Tag, TaggedItem 

def items(self): 
    tag = Tag.objects.get(name='you tag name') 
    return TaggedItem.objects.get_by_model(Entry, tag) 
+0

merci alex qui serait un indice utile. im penser à sous-classer le LatestEntriesFeed. –

2

Après avoir réalisé comment get_object() fonctionne enfin je le faire fonctionner. J'ai ajouté quelques importations:

from django.core.exceptions import ObjectDoesNotExist 
from tagging.models import Tag, TaggedItem 

class TagFeed(LatestEntriesFeed): 

    def get_object(self, bits): 
     if len(bits) != 1: 
      raise ObjectDoesNotExist 
     return Tag.objects.get(name__exact=bits[0]) 

    def title(self, obj): 
     return "%s: Latest entries under the tag '%s'" % (current_site.name, obj.name) 

    def description(self, obj): 
     return "%s: Latest entries under the tag '%s'" % (current_site.name, obj.name) 

    def items(self, obj): 
     return TaggedItem.objects.get_by_model(Entry, obj.name) 

Disons que j'accéder à/feeds/tag/thetagnamehere/puis get_object va chercher l'objet d'étiquette avec le nom "thetagnamehere". Les items de méthode() vont alors chercher les entrées sous le tag "thetagnamehere". J'ai aussi créé les feeds/tag_title.html et les feeds/tag_description.html dans mon répertoire de templates. Dans mon projet urls.py:

feeds = { 
'latest': LatestEntriesFeed, 
'tag': TagFeed, 
} 

(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', 
    {'feed_dict': feeds},), 

C'est tout. Im maintenant capable de générer un flux pour un tag particulier dans ma barre latérale. J'espère que ça aide.