Jinja2 Template - for loop
12,658
Try:
<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>
There you can set sorting instead form._fields.items()
or condition instead {% if name != 'csrf_token' %}
. Or:
<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>
There you can also use n.__str__()
instead filter n|string
.
Comments
-
Kilrathy almost 2 years
didn't find another post which has the similar problem, I'm trying to generate some checkboxes with flask and wtforms, at the moment I've got this piece of code:
<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>
This works so far, but now I try to do this with a simple for-loop like:
<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>
I tried with (), {} and {{}} ... is this even possible?
-
Kilrathy almost 11 yearsI tried both, the second one gives me the error "TypeError: cannot concatenate 'str' and 'int' objects". The fist one partially works, but it gives me all field out, I only want the BooleanField bri1-4... any idea?
-
tbicr almost 11 yearsSorry, I updated second example. For first you can add own condition:
{% if name.startswith('bri') %}
.