mydict = {"key1":"value1", "key2":"value2"}
在Django模板中查找字典值的常规方法是{{ mydict.key1 }}
,{{ mydict.key2 }}
。如果键是一个循环变量呢?
{% for item in list %} # where item has an attribute NAME
{{ mydict.item.NAME }} # I want to look up mydict[item.NAME]
{% endfor %}
mydict.item.NAME
出现故障,如何修复?
9条答案
按热度按时间kxxlusnw1#
编写自定义模板筛选器:
(我使用
.get
,这样如果键不存在,它就不会返回任何值。如果你使用dictionary[key]
,它就会产生一个KeyError
。)用法:
y1aodyip2#
在循环中从字典中同时获取键和值:
我发现这更容易阅读,而且它避免了特殊编码的需要。无论如何,我通常需要循环内部的键和值。
tgabmvqs3#
默认情况下不能。点是属性查找/键查找/切片的分隔符/触发器。
点在模板呈现中具有特殊含义。变量名中的点表示查找。具体来说,当模板系统在变量名中遇到点时,它将按以下顺序尝试以下查找:
但是你可以做一个过滤器,让你传入一个参数:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
gxwragnw4#
对于我来说,在我的应用程序中创建一个名为
template_filters.py
的python文件,并使用以下内容完成了这项工作用法就像库莱布伦所说的:
qncylg1j5#
我也遇到过类似的情况,但我用了不同的解决方案。
在我的模型中,我创建了一个执行字典查找的属性,然后在模板中使用该属性。
在我的模型中:-
在我的模板中:-
70gysomp6#
环境: Django 2.2
1.示例代码:
我将此代码放在名为portfoliomgr的项目文件夹中名为template_filters.py的文件中
1.无论您将过滤器代码放在何处,都要确保该文件夹中有**init.py**
1.将该文件添加到projectfolder/ www.example.com文件的模板部分的库部分settings.py。对我来说,它是portfoliomgr/settings.py
1.在html代码中加载库
pdsfdshx7#
既然我不能发表评论,让我以回答的形式来做这件事:
要在culebrón's answer或Yuji 'Tomita' Tomita's answer上构建,传入函数的字典是字符串形式的,因此可能要先使用ast.literal_eval将字符串转换为字典,就像this example中那样。
经过此编辑后,代码应如下所示:
1cosmwyk8#
公认的答案很好用,但我只想添加如何使用过滤器链向下钻取嵌套值
输出将为
3000
ebdffaop9#
环境:Django 2.1.7
查看:
模板: