【问题标题】:django template: custom template tag to display dictionary of dictionarydjango模板:自定义模板标签显示字典的字典
【发布时间】:2013-05-06 09:57:52
【问题描述】:

我想在我的模板中这样做:

{% for field in form %}
    {{ realNameDict.field.name }}
{% endfor %}

realNameDict 是一个字典。上面的代码不起作用。为什么?

编辑: 在python中,我想我可以这样做:

print realNameDict[field[name]]

非常感谢。

解决方案:

感谢@Calvin Cheng 的解释: 诀窍是使用自定义模板标签。

1/ 在您的应用程序目录中,创建一个名为templatetags 的目录。创建两个文件:__init__.py(留空)和extra.py(用于创建自定义模板标签)。

2/ 在extra.py中,创建获取dictionary字典值的函数:

from django import template
register = template.Library()

@register.filter
def ofKey(value, arg):
    if value:
        return value.get(arg)
    else:
        return ""

3/在您的模板中,在内容块内,添加以下行以加载自定义模板标签:

{% load extra %}

4/ 在你的模板中调用自定义模板标签:

{{ realNameDict|ofKey:field.name }}

【问题讨论】:

    标签: django templates dictionary


    【解决方案1】:

    realNameDict 不知道field 是什么。您期望 in 循环的模板能够解析字典中的字段值,但 realNameDict.field.namefield 实际上是文字字段。

    解决方案

    如果您真的坚持动态解析field,诀窍是编写自定义模板标签。这是一个示例,一个类似(不完全相同)问题的解决方案 - Django template object property lookup with a dynamic variable name

    在另一个问题的答案中(但与您的问题非常相似),ofKey 是一个自定义模板标记函数,可动态解析item.[variable] 中的[variable]

    意思是你应该有这样的东西:-

    {% for field in form %}
        {{ field|resolve_realNameDict_name }}
    {% endfor %}
    

    因为您的 for-in 循环中确实有 field 的解析值,您现在可以使用自定义模板标记函数 resolve_realNameDict_name您当然必须自己编写)在 field 循环通过 for-in 循环时对它进行操作,并将您的自定义模板标记函数中的适当 name 值返回到模板中。

    【讨论】:

    • 好的。那么怎么办呢?我已经编辑了我的第一篇文章来解释我想要做什么。
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2014-01-24
    • 1970-01-01
    • 2015-11-25
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多