blocco annidato e ciclo for in un blocco modello Jinja

Aug 23 2020

Tentativo di utilizzare il blocco nidificato e il ciclo for in una configurazione del blocco modello Jinja.

{% block main %}
<table>
<tr>
<td>user id</td>
<td>user sec level</td>
</tr>
    {% block main_nested_b scoped %}
    {%
    for user in list_users:
        t_id_user = str(user[0][0])
        t_sec_level = str(user[2][0])
    %}
<tr>
<td>
<a href='/usersEdit?id_user={{ t_id_user }}' class='onwhite'>edit</a>
</td>
</tr>
    {% endfor %}
    {% endblock main_nested_b %}
{% endblock main %}
</table>

Messaggio di errore:

jinja2.exceptions.TemplateSyntaxError: expected token 'end of statement block', got 't_id_user'

Aiuto?

Risposte

2 MartijnPieters Aug 23 2020 at 13:54

Non puoi trattare la sintassi Jinja come sintassi Python. Non è la stessa cosa. Mantieni il fortag separato dai tag assignment ( set) :

    {% for user in list_users %}
        {% set t_id_user = user[0][0] %}
        {% set t_sec_level = user[2][0] %}

Nota che non c'è nemmeno un :alla fine della for ... in ...sintassi! Inoltre non è necessario chiamare str()qui, lasciare che Jinja si converta in stringhe per te; ovunque tu usi {{ t_id_user }}o {{ t_sec_level }}il valore verrà comunque convertito in una stringa.

Ecco il modello completo:

<table>
{% block main %}
    {% block main_nested_b scoped %}
    {% for user in list_users %}
        {% set t_id_user = user[0][0] %}
        {% set t_sec_level = user[2][0] %}
<tr>
<td>
<a href='/usersEdit?id_user={{ t_id_user }}' class='onwhite'>edit</a>
</td>
</tr>
    {% endfor %}
    {% endblock main_nested_b %}
{% endblock main %}
</table>