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

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

【问题讨论】:

  • 也许你可以向我们展示你的模型是什么样子的。

标签: django django-templates django-custom-tags


【解决方案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
    • 在这种情况下,您需要从模板和文章中传递类别,因为无法从文章中获取您需要的特定类别。
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2011-09-16
    相关资源
    最近更新 更多