2010-07-20 3 views
1

Я хочу создать фид последних записей в блоге под определенным тегом. Я использовал django-tagging. Как я могу это сделать? Вот как я определил мой LatestEntriesFeeddjango создать фид для определенного тега

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()) 

ответ

1

Измените метод items к на следующие:

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

спасибо alex, что было бы полезно намекнуть. im думает о подклассе LatestEntriesFeed. –

2

После понимая, как get_object() работает я, наконец, сделать его работу. Я добавил некоторые импорт:

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) 

Позволяет сказать, что доступ/каналы/теги/thetagnamehere/затем get_object будет получать объект тега с именем «thetagnamehere». Затем элементы метода() будут извлекать Записи под тегом «thetagnamehere». Я также создал feeds/tag_title.html и feeds/tag_description.html в моем каталоге шаблонов. В моем проекте urls.py:

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

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

Всё. Im теперь может генерировать фид для определенного тега на боковой панели. Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^