2

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

{% 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 中,创建获取字典字典值的函数:

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 }}
4

1 回答 1

2

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

解决方案

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

在this answer to a different question(但与您的问题非常相似)中,ofKey是一个自定义模板标记功能,可动态解析[variable]in item.[variable].

这意味着你应该有这样的东西: -

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

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

于 2013-05-12T03:48:48.253 回答