作为制作一系列字典的模板?

时间:2014-05-13 18:09:33

标签: python django

我传递给模板字典

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()'

2 个答案:

答案 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中对数据进行任何准备,然后在模板中提供表示逻辑。