Django,自定义标签...怎么样?

Posted

技术标签:

【中文标题】Django,自定义标签...怎么样?【英文标题】:Django, custom tag... how? 【发布时间】:2010-11-29 20:01:22 【问题描述】:

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

【问题讨论】:

也许你可以向我们展示你的模型是什么样子的。 【参考方案1】:

为什么要自定义标签?将方法添加到文章模型并从模板中调用它可能会更好、更简洁。根据您的模型,该方法实际上是微不足道的。

【讨论】:

是的。类似 Article.get_related_titles(10) 大家好,感谢您的回复,我是 Django 新手,对不起 :).. 我使用 Django Generic View 基于日期,我迷失了这部分...在模型中创建一个方法??,我知道什么是方法,但是您说的是模型中的查询集? 在模型类定义中,您可以添加任意方法(与添加 __unicode__() 或 get_absolute_url() 的方式相同),其返回值会自动在模板中可用。 -1。在模型中这样做是一个愚蠢的想法。拥有返回其他实例的实例方法是不好的,并且类方法将无权访问当前文章以获取相关的。模板标签绝对是要走的路。 另外,你不能将参数从模板传递给方法,所以无论如何你都需要一个模板标签。【参考方案2】:

在此处查看制作自定义标签:

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags

您需要将相关的类别对象传递给模板上下文。

【讨论】:

【参考方案3】:

最好的方法是使用包含标签。这是一个渲染模板片段的标签,模板片段渲染了 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 是文章对象的名称。

【讨论】:

b-list.org/weblog/2006/jun/07/…James Bannet 描述了一种技术,如何制作更通用的标签。也就是说,您可以为模型“新闻”、“文章”、“事件”使用一个 template_tag……它并不需要您描述,但值得一读。 @Daniel:我的浏览器告诉我,我对你的答案投了反对票。我不打算,我肯定没有点击它。我不知道,它是怎么发生的。它说您需要编辑答案,以便我可以删除我的反对票。很抱歉给您带来不便... 没问题,我编辑了。不过,为 James 的文章的链接 +1。 感谢 Daniel Roseman,“正在工作”,我知道正在工作,只是知道我有关于关系的“comun 错误”渲染时遇到异常:'ManyRelatedManager' 对象没有属性 'noticia_set'我的字段类别是类型 ManyToManyField 在这种情况下,您需要从模板和文章中传递类别,因为无法从文章中获取您需要的特定类别。

以上是关于Django,自定义标签...怎么样?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义html添加到django中的choicefield标签

Django:如何查看已定义的自定义标签?

自定义 Django 标签和 jQuery

Django(自定义过滤器和自定义标签)

django自定义模板标签和过滤器

Django的自定义标签