2009-09-20 73 views
1

我想制作一个django自定义标签,以显示用户正在阅读文章的类别中的10个条目标题。我怎样才能做到这一点?我需要通过实际条目中的类别。Django,自定义标签...怎么样?

+0

也许你可以告诉我们你的模型是怎样的。 – 2009-09-20 05:57:24

回答

8

做到这一点的最好方法是使用包含标签。这是一个呈现呈现10个相关文章的模板片段的标记。

您只需将当前文章传入标记,然后返回模板片段的上下文 - 即相关文章。

@register.inclusion_tag('related_articles.html') 
def related_articles(article, count): 
    category = article.category 
    articles = category.article_set.exclude(id=article.id)[:count] 
    return {'articles': articles} 

您需要在输出文章的模板目录中有一个related_articles.html文件。然后,从你的主模板调用它,你只是做

{% related_articles article 10 %} 

其中article是文章对象的名称。

+2

http://www.b-list.org/weblog/2006/jun/07/django-tips-write-better-template-tags/ James Bannet描述了一种技术,即如何制作更通用的标签。即你可以为模型“新闻”,“文章”,“事件”使用一个template_tag ......它并不轻描淡写地希望你描述,但值得一读。 – vikingosegundo 2009-09-20 16:50:13

+0

@Daniel:我的浏览器告诉我,我投了你的答案。我没有打算,我当然没有点击它。我不知道,它是怎么发生的。它说你需要编辑答案,以便我可以删除我的倒票。对不便之处... – vikingosegundo 2009-09-20 16:55:43

+0

没问题,我编辑它。尽管如此,链接詹姆斯的作品还是+1。 – 2009-09-20 17:39:37

2

为什么使用自定义标签?向文章模型添加一个方法,并从模板中调用该方法可能会更好,更干净。根据你的模型,这个方法实际上是微不足道的。

+0

是的。有点像Article.get_related_titles(10) – Evgeny 2009-09-20 04:47:04

+0

嗨,大家好,感谢您的回复,即时新与Django,抱歉:) ..即时通讯使用Django通用视图基于日期,我失去了这部分...在模型中做一个方法? ,我知道什么是方法,但是,你在模型中谈论queryset? – Asinox 2009-09-20 05:03:57

+0

在模型类定义中,您可以添加任意方法(与添加__unicode __()或get_absolute_url()相同),其返回值可在模板中自动提供。 – 2009-09-20 05:46:31