ネストされたブロックとJinjaテンプレートブロックのforループ

Aug 23 2020

Jinjaテンプレートブロックのセットアップでネストされたブロックとforループを使用しようとしています。

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

エラーメッセージ:

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

助けて?

回答

2 MartijnPieters Aug 23 2020 at 13:54

Jinja構文をPython構文として扱うことはできません。それは同じことではありません。forタグを割り当て(set)タグとは別にしてください:

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

構文の:最後にもがないことに注意してくださいfor ... in ...!またstr()、ここで呼び出す必要はありません。文字列に変換するには、Jinjaにお任せください。どこで使用して{{ t_id_user }}{{ t_sec_level }}、値はとにかく文字列に変換されます。

完全なテンプレートは次のとおりです。

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