2013-05-22 11 views
7

non ha trovato un altro post che ha il problema simile, sto cercando di generare alcuni checkbox con la boccetta e wtforms, in questo momento ho questo pezzo di codice:Jinja2 Template - per il ciclo

<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> 

questo funziona fino ad ora, ma adesso cerco di fare questo con un semplice ciclo for come:

<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> 

ho provato con(), {} e {{}} ... è anche possibile?

+0

Questa non è una domanda su Flask, perché Flask non include un motore di template. Presumibilmente ti stai chiedendo di Jinja2? –

+0

Scusa per colpa mia, hai tutto il diritto. – Kilrathy

+0

@Kilrathy Quindi il problema è con "range"? [Questo] (http://stackoverflow.com/q/6036082/1205368) aiuta? – Salem

risposta

12

Prova:

<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> 

Ci si può impostare l'ordinamento invece form._fields.items() o condizione, invece {% if name != 'csrf_token' %}. Oppure:

<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> 

Ci si può anche utilizzare n.__str__() invece filtrare n|string.

+0

Ho provato entrambi, il secondo mi dà l'errore "TypeError: can not concatenate 'str' e 'int' oggetti". Il primo funziona parzialmente, ma mi dà tutto il campo, voglio solo il campo booleano bri1-4 ... qualche idea? – Kilrathy

+1

Siamo spiacenti, ho aggiornato il secondo esempio. Per prima cosa è possibile aggiungere la propria condizione: '{% se name.startswith ('bri')%}'. – tbicr

+0

Hey, grazie mille! Questo funziona per me! – Kilrathy

Problemi correlati