我有以下django模板,在我迭代列表(class_list_overall
)时,我想在另一个列表(forloop.counter0
)中使用classTimeSlots
作为索引。它只是给我一个TemplateSyntaxError
。我尝试了以下变化:
{{classTimeSlots.{{forloop.counter0}}}}
{{classTimeSlots.[forloop.counter0]}}
{{classTimeSlots.{forloop.counter0}}}
{{classTimeSlots.(forloop.counter0)}}
{{classTimeSlots.forloop.counter0}}
{% with forloop.counter0 as index%}
<legend>{{ classTimeSlots.index}}</legend>
{% endwith %}
其中没有一个有效。有什么建议?我只是DJango的新手。我正在使用Google App Engine。
这是代码片段(我知道它效率低下,但我一直在尝试不同的事情):
{% for class_list in class_list_overall %}
<fieldset> <legend>{{ classTimeSlots.forloop.counter0 }}</legend>
<ul>
<li> <label>First Choice </label>
<select class="dropdown" name="class{{forloop.counter}}1" size="1">
<option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
{% for class in class_list %}
<option>{{class}}</option>
{% endfor %}
</select>
</li>
<li>
<label>Second Choice </label>
<select class="dropdown" name="class{{forloop.counter}}2" size="1">
<option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
{% for class in class_list %}
<option>{{class}}</option>
{% endfor %}
</select>
</li>
</ul>
</fieldset>
{% endfor %}
答案 0 :(得分:2)
简短回答:你做不到。
模板语言不会尝试确定以点语法传递的变量的值。
它将对forloop.counter0
1:编写一个接受变量和密钥的模板标记,并让它返回variable[key]
2:这很可能在视图中完成。我能看到吗?
答案 1 :(得分:2)
Django不支持这一点 - 它是故意限制的。相反,您应该将视图函数修改为zip
两个列表,并将其传递给模板。
答案 2 :(得分:0)
它可能但不值得推荐:
{% for class_list in class_list_overall %}
<fieldset> <legend>
{% for cts in classTimeSlots %}
{% ifequal forloop.counter forloop.parentloop.counter %} {{cts}}
{% endifequal %}
{% endfor %} </legend>
<ul>
<li> <label>First Choice </label>
<select class="dropdown" name="class{{forloop.counter}}1" size="1">
<option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
{% for class in class_list %}
<option>{{class}}</option>
{% endfor %}
</select>
</li>
<li>
<label>Second Choice </label>
<select class="dropdown" name="class{{forloop.counter}}2" size="1">
<option value="Click Here to Choose" selected="selected">Click Here to Choose</option>
{% for class in class_list %}
<option>{{class}}</option>
{% endfor %}
</select>
</li>
</ul>
</fieldset>{% endfor %}
但最好将列表纳入父词典:
[class_list_overall[i].update({'label':classTimeSlots[i]}) for i in range(0,len(classTimeSlots))]
然后将上面的代码更改为:
<legend>
{{ class_list.label }}
</legend>