如何在Django模板中建立操作的优先级?

时间:2014-01-05 06:24:07

标签: python django django-templates

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

2 个答案:

答案 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 %}