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.

Share:
12,658
Kilrathy
Author by

Kilrathy

Simple Linux System Engineer

Updated on July 19, 2022

Comments

  • Kilrathy
    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
    Kilrathy almost 11 years
    I 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
    tbicr almost 11 years
    Sorry, I updated second example. For first you can add own condition: {% if name.startswith('bri') %}.