在我的Django中我有一个模型:
class myModel(models.model):
a = models.TextField()
在我的views.py文件中,我有这个:
myDict = {
"A": myModel(a="X"),
"B": myModel(a="Y"),
"C": myModel(a="Z"),
}
我创建了以下模板标记:
@register.filter
def get_item(dictionary, key):
return dictionary[key]
在我的模板中,我使用myKey循环键。我有以下内容。它有效:
{% for myKey in myDict %}
{{myDict|get_item:myKey}}
{% endfor %}
我可以告诉它有效,因为它在网页上打印myDict [myKeys]。
但是,当我想访问myDict [“myKey”]的属性a时,它会失败:
{% for myKey in myDict %}
{{myDict|get_item:myKey.a}}
{% endfor %}
它给了我以下错误:
Failed lookup for key [a] in u'A'
问题在于,当我说myDict | get_item:myKey.a时,我的意思是(myDict | get_item:myKey).a但它认为我的意思是myDict | get_item:(myKey.a)
如何告诉它:运算符的优先级更高。不使用括号(Django模板不允许)?
答案 0 :(得分:1)
您不需要自定义过滤器。如果您使用Python 2.x,只需使用dict.values
(或dict.itervalues
):
{% for myModel in myDict.values %}
{{ myModel.a }}
{% endfor %}
答案 1 :(得分:1)
您可以使用with
标记:
{% with myDict|get_item:myKey as item %}
{{ item.a }}
{% endwith %}