在Django模板标签中使用变量作为对象键
我有两个四层的对象要传给Django模板。目前我在循环每一层,如果有下一层就继续往下走。在这个过程中,我用key、key2和key3来表示当前在对象中的位置。我想用这些变量来引用另一个有相同层级的对象,但遇到了一些问题。
如果我在Python中做这个,代码看起来会是这样的:
my_object[ key ][ key2 ][ key3 ]
但是在Django模板中,似乎不能用方括号,如果我用点号,系统会把key当成键名,而不是变量来处理。
如果你需要我代码的更多细节,请告诉我。谢谢!
编辑:这里有一个我的对象的例子,以及我的模板代码。
variable1 = {
"content": {
"pages": {
"view":True,
"add":True,
"edit":True,
"delete":True
},
"articles": {
"view":True,
"add":True,
"edit":True,
"delete":True
},
"slideshow": {
"view":True,
"edit":True
},
},
"people": {
"view":True,
"add":True,
"edit":True,
"delete":True,
"sort-staff":True,
"sort-riders":True
}
}
variable2和variable1是一样的,都是相同的键,但有些键缺失。
这是我用来处理这个对象的模板代码。
{% for key, value in variable1.items %}
<strong>{{ key|title }}</strong>
{% for key2, value2 in value.items %}
{% if value2.items %}
<p class="indent">{{ key2|title }}
{% for key3, value3 in value2.items %}
<p class="indent"><input type="checkbox" name="form_permission_{{ key }}_{{ key2 }}_{{ key3 }}" {% if variable2[key][key2][key3] %}checked="checked"{% endif %}> {{ key3|title }}</p>
{% endfor %}
</p>
{% else %}
<p class="indent"><input type="checkbox" name="form_permission_{{ key }}_{{ key2 }}"> {{ key2|title }}</p>
{% endif %}
{% endfor %}
{% endfor %}
如果你看最里面的那一行,你会看到{% if variable2[key][key2][key3] %}checked="checked"{% endif %}
。你应该能理解我想用这段代码实现的目的。
2 个回答
0
这样做是不行的。你可以考虑写一个模板标签或者过滤器来实现这个功能。
0
我最后在把数据发送到模板之前就进行了排序和比较,所以这个问题就不需要了。如果有其他的选择,欢迎大家分享。