我想在我的模板中执行此操作:
{% 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 }}
答案 0 :(得分:2)
realNameDict
不知道field
是什么。您期望in循环的模板可以解析字典中的字段值,但realNameDict.field.name
的{{1}}实际上是文字字段。
<强>解决方案强>
如果您真的坚持动态解析field
,那么诀窍就是编写自定义模板标记。这是一个示例,解决类似(不完全相同)的问题 - Django template object property lookup with a dynamic variable name
在对不同问题的回答中(但与您的问题非常相似),field
是一个自定义模板标记函数,可动态解析ofKey
中的[variable]
。
意思是你应该有这样的东西: -
item.[variable]
因为您的for-in循环确实具有{% for field in form %}
{{ field|resolve_realNameDict_name }}
{% endfor %}
的已解析值,所以您现在可以使用自定义模板标记函数field
(您当然必须自己编写< / em>)在resolve_realNameDict_name
上循环执行for-in循环并将自定义模板标记函数中相应的field
值返回到模板中。