在我的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模板不允许)?

最佳答案

您不需要自定义过滤器。只需使用dict.values(如果使用Python 2.x,则使用dict.itervalues):

{% for myModel in myDict.values %}
    {{ myModel.a }}
{% endfor %}

关于python - 如何在Django模板中确定操作的优先级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20930811/

10-12 21:01