我传递给模板字典
CHOICES_gender = (('0', 'М'), ('1', 'Ж'))
我需要输入元素'select'
键和值CHOICES_gender
。
我尝试按如下方式进行:
<select class="fld_gender" id="fld_gender">
{% for (key, item, ) in CHOICES_gender.values() %}
<option name="key" value="volvo">item</option>
{% endfor %}
</select>
但收到以下错误:
Exception Type: TemplateSyntaxError
Exception Value:
Could not parse the remainder: '()' from 'CHOICES_gender.values()'
答案 0 :(得分:1)
我认为这会解决你的问题:)
<select class="fld_gender" id="fld_gender">
{% for key, item in CHOICES_gender %}
<option name="{{ key }}" value="volvo">{{ item }}</option>
{% endfor %}
</select>
无需在元组上调用函数.values()
。
答案 1 :(得分:1)
您提供的CHOICES_gender
不是dict
对象
也许您在将其转换为字典时省略了一个步骤?
CHOICES_gender = {'0':'М', '1':'Ж'}
然后正确的语法是:
<select class="fld_gender" id="fld_gender">
{% for key, item in CHOICES_gender.items %}
<option name="key" value="volvo">item</option>
{% endfor %}
</select>
您可以将现有对象转换为字典:
CHOICES_dictionary = { o[0]:o[1] for o in CHOICES_gender }
如果你想保持对象的原样:
CHOICES_gender = (('0', 'М'), ('1', 'Ж'))
你可以像在python中那样解压缩它:
<select class="fld_gender" id="fld_gender">
{% for key, item in CHOICES_gender %}
<option name="key" value="volvo">item</option>
{% endfor %}
</select>
您的错误被抛出,因为您无法在django模板中调用带有括号的对象上的方法,这就是为什么它最后会抱怨()
。
参考:Django Book Ch 4, About a 1/3 of the way down the page in "Context Variable Lookup"
作为旁注,你将永远无法使用参数调用方法,在这种情况下,如果你确实感觉需要,你可以写一个filters,但通常所有的数据都需要是序列化的,即静态布局而不是在模板中生成。
通常,您在views.py
中对数据进行任何准备,然后在模板中提供表示逻辑。