Django создать канал для определенного тега - PullRequest
1 голос
/ 20 июля 2010

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

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

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Поняв, как работает 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)

Допустим, я захожу в / feeds / tag / thetagnamehere /, тогда get_object извлекает объект тега с именем "thetagnamehere". Метод items () будет затем извлекать записи под тегом «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}, ),

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

1 голос
/ 20 июля 2010

Измените свой 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)
...