【问题标题】:Django custom template-tag not rendered in loopDjango自定义模板标签未在循环中呈现
【发布时间】:2015-03-14 14:50:14
【问题描述】:

我的自定义标签:

# app/templatetags/ctags.py

def getgenre():
    genre = ["Test1", "Test2"]
    return genre

register.simple_tag(getgenre)

我的html:

# app/templates/base.html

{% load ctags %}
<!-- {% getgenre %} -->
{% for genre in getgenre %}
    <li>{{genre}}</li>
{% endfor %}

这会为我呈现一个空白页面。 如果我取消注释 {% getgenre %},django 会按预期呈现 ["Test1", "Test2"]。 我尝试了无数种设置标签的变体(包括 non-simple_tag 方式),但均无济于事。我根本无法迭代我的自定义标签之一返回的任何值。

我在这里缺少一些基本的东西吗?

【问题讨论】:

标签: python django django-templates


【解决方案1】:

你应该使用assignment_tag 而不是simple_tag

@register.assignment_tag
def getgenre():
    genre = ["Test1", "Test2"]
    return genre

然后在模板中:

{% load ctags %}
{% getgenre as genre_list %}
{% for genre in genre_list %}
    <li>{{genre}}</li>
{% endfor %}

【讨论】:

  • 有效!太棒了,谢谢...应该把文档读到最后-.- 虽然我确实认为他们可能刚刚提到了 simple_tag 的局限性...在 simple_tag 部分没有找到任何相关内容。跨度>
  • 谢谢!我也尝试使用 simple_tags,因为文档说 assignment_tags 自 1.9 以来已弃用,但我无法让它们工作,而您的解决方案可以!
【解决方案2】:

自定义标签写入任何应用程序的 base.py 中

from django import template
register = template.Library()
@register.inclusion_tag('templte/genre.html')
def getgenre():
    genre = ["Test1", "Test2"]
    return genre

然后是模板genre.html

{% load ctags %}
{% for genre in genre_list %}
    <li>{{genre}}</li>
{% endfor %}

【讨论】:

  • 恐怕这对我不起作用。将genre_list 更改为getgenre 或使用{% getgenre as genre_list %} 也不会。
  • {% getgenre as Genre_list %}
  • 我在 django 中编写自定义模板标签的方法,我在任何应用程序、templatetags 文件夹中创建一个文件夹,然后创建一个 base.py(所有自定义标签都通用),我在这里编写代码然后所有标签,我在模板中创建一个文件夹标签,在那里我创建一个html页面并在之后编码,我只是在base.html [模板文件夹中的主模板]中加载base,然后我在里面包含模板标签函数名称模板,希望你能理解
【解决方案3】:

作为@register.assignment_taghas been removed afterDjango >= 1.9。就像link 中所说的“simple_tag() 助手获得了同样的能力”。是的,但至少在我的情况下不适用于 for 循环。

register.simple_tag 中使用register.filter 装饰器(reference)

@register.filter
def getgenre(arg=None):
    genre = ["Test1", "Test2"]
    return genre

在模板中(.html)

{% load ctags %}
{% for genre in ""|genre_list %}
    <li>{{genre}}</li>
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2012-12-27
    • 1970-01-01
    • 2012-12-18
    • 2015-01-20
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多