2013-05-22 178 views
7

沒有發現它有類似的問題,另一篇文章,我想產生一些複選框與燒瓶和wtforms,此刻我有這段代碼:Jinja2的模板 - for循環

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    <label class="checkbox inline"> 
     {{ form.bri1(value=1) }} {{ form.bri1.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri2(value=1) }} {{ form.bri2.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri3(value=1) }} {{ form.bri3.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri4(value=1) }} {{ form.bri4.label }} 
    </label> 
</div> 

到目前爲止是這種情況,但現在我嘗試像一個簡單的for循環來做到這一點:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for n in range(1,6) %} 
    <label class="checkbox inline"> 
     {{ form.brin.label }} 
    {% endfor %} 
</div> 

我(試過),{}和{{}} ...這甚至可能嗎?

+0

這不是關於Flask的問題,因爲Flask不包含模板引擎。想必你問Jinja2? –

+0

對不起,我是你的錯。 – Kilrathy

+0

@Kilrathy所以問題是與「範圍」? [this](http://stackoverflow.com/q/6036082/1205368)有幫助嗎? – Salem

回答

12

嘗試:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for name, field in form._fields.items() %} 
     {% if name != 'csrf_token' %} 
      <label class="checkbox inline"> 
       {{ field(value=1) }} {{ field.label }} 
      </label> 
     {% endif %} 
    {% endfor %} 
</div> 

在那裏,你可以集排序,而不是form._fields.items()或條件,而不是{% if name != 'csrf_token' %}。或者:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for n in range(1,6) %} 
     {% if form['bri' + n|string] %} 
      <label class="checkbox inline"> 
       {{ form['bri' + n|string](value=1) }} {{ form['bri' + n|string].label }} 
      </label> 
     {% endif %} 
    {% endfor %} 
</div> 

在那裏,您還可以使用n.__str__()代替過濾n|string

+0

我試了兩個,第二個給我的錯誤「TypeError:無法連接'str'和'int'對象」。第一個部分工作,但它給了我所有的領域,我只想要BooleanField bri1-4 ...任何想法? – Kilrathy

+1

對不起,我更新了第二個例子。首先,你可以添加自己的條件:'{%if name.startswith('bri')%}'。 – tbicr

+0

嘿,非常感謝!這對我來說是完美的! – Kilrathy