【问题标题】:Django - create custom tag to acces variable by index in templateDjango - 创建自定义标签以通过模板中的索引访问变量
【发布时间】:2016-12-29 07:32:51
【问题描述】:

我在 django 中有一个 HTML 模板。它有两个变量:类别列表(查询集,它由 django 模型上的.objects.all() 函数返回)和参赛者字典。作为字典的键,我使用类别的 id,值是参赛者列表。 我想打印类别的名称,然后是所有参赛者。现在我有了这个:

{% for category in categories_list %}
    <h1>category.category_name</h1>
    {% for contestant in contestants_dict[category.id] %}
        {{ contestant }} </br>
    {% endfor %}
{% endfor %}

但是,当我运行它时,我得到了错误:

TemplateSyntaxError at /olympiada/contestants/
Could not parse the remainder: '[category.id]' from 'contestants_dict[category.id]'

到目前为止我所知道的是我不能在模板中使用索引。我认为{% something %} 包含纯Python,但它推高了它只是一个标签。我知道我必须创建自己的 simple_tag,但我不知道如何。我阅读了文档Writing custom template tags,但是信息很少,我无法弄清楚如何创建(主要在 for 循环中使用)标签,该标签将采用 dict、key 并返回值。我尝试的是: 模板标签/custom_tags.py:

from django import template


register = template.Library()


@register.simple_tag
def list_index(a, b):
    return a[b]

在模板中:

{% for contestant in list_index contestants_dict category.id %}

但是我得到了 TemplateSyntaxError。 您能否解释/告诉我如何创建标签,或者有​​更好的方法吗? 谢谢。

//编辑: 我设法做到了:

{% list_index contestants_list category.id as cont %}
    {% for contestant in  cont %}

它有效,但它需要 2 行,我需要创建另一个变量。没有它有什么办法吗?

【问题讨论】:

  • 使用过滤器代替标签。

标签: python django


【解决方案1】:

如果你不想要这样的 2 行,你应该可以使用我认为的过滤器

@register.filter
def list_index(a, b):
    return a[b]

那么这样的用法

{% for contestant in contestants_dict|list_index:category.id %}
    {{ contestant }} </br>
{% endfor %}

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2013-10-29
    • 2011-01-10
    • 2012-03-25
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多