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

Python 如何在Django模板中建立操作优先级?,python,django,django-templates,Python,Django,Django Templates,在我的Django中,我有这样一个模型: class myModel(models.model): a = models.TextField() 在my views.py文件中,我有以下内容: myDict = { "A": myModel(a="X"), "B": myModel(a="Y"), "C": myModel(a="Z"), } 我已创建以下模板标记: @register.filter def get_item(dictionary, key):

在我的Django中,我有这样一个模型:

class myModel(models.model):
    a = models.TextField()
在my 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|u item:myKey.a时,我的意思是(myDict | get|u item:myKey)。但它认为我的意思是myDict | get|u item:(myKey.a)


我如何告诉它:运算符的优先级更高。不使用括号(Django模板不允许使用括号)?

您不需要自定义筛选器。只需使用(或者如果使用Python2.x):


您可以将
标记一起使用:

{% with myDict|get_item:myKey as item %}
    {{ item.a }}
{% endwith %} 

在一个:
{%for key,value in myDict.items%}{{value.a}{%endfor%}
中迭代dict怎么样?我推荐上面@alecxe的答案。您还可以使用myDict执行
{%操作| get_item:myKey作为item%}{{item.a}{%endwith%}
在myDict上的迭代顺序是相关的。我想按照上面的解决方案(甚至是我的原始问题)中没有捕捉到的非常具体的顺序进行操作。@SaqibAli,Python dictionary不保证键的顺序。“使用怎么样?”一个隐形的回答对我来说非常有效。谢谢
{% with myDict|get_item:myKey as item %}
    {{ item.a }}
{% endwith %}