2010-07-20 83 views
1

我想生成特定标记下的博客帖子的最新条目的供稿。我用django标签。我怎样才能做到这一点?这是我如何定义我的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

感谢亚历克斯这将是有益的提示。即时考虑子类LatestEntriesFeed。 – 2010-07-21 02:15:45

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

就是这样。我现在能够为我的边栏中的特定标签生成一个Feed。我希望有所帮助。