1

Web ページに辞書の内容を表示したい。辞書構造は再帰的です。私はそれを機能させることはできません。代わりに、再帰を「手動で展開」する必要があります。おそらく、私はドキュメントを正しく理解していません。

再帰を使用しないコード (そして機能します)。

{% extends "base.html" %}
{% block body %}
<form action="">
{% for account in account_list['account_list'] %}
<ul>
    <input type="checkbox" id="{{ account['id'] }}" value="{{ account['name'] }}" type="{{ account['type'] }}"> {{ account['name'] }} <br>
    {% for key, value in account.items() %}
        {% if value is not string %}
            {% for acc in value %}
                {% if acc is mapping %}
                    <ul> 
                        <input type="checkbox" id="{{ acc['id'] }}" value="{{ acc['name'] }}" type="{{ acc['type'] }}"> {{ acc['name'] }} <br>
                        {% for ke, va in acc.items() %}
                            {% if va is not string %}
                                {% for ac in va %}
                                    {% if ac is mapping %}
                                        <ul>
                                            <input type="checkbox" id="{{ ac['id'] }}" value="{{ ac['name'] }}" type="{{ ac['type'] }}"> {{ ac['name'] }} <br>
                                        </ul>
                                    {% endif %}
                                {% endfor %}
                            {% endif %}
                        {% endfor %}
                    </ul>
                {% endif %}
            {% endfor %}
        {% endif %}
    {% endfor %}
</ul>
{% endfor %}
</form>
{% endblock %}

再帰を伴うコードですが、機能しません。

{% extends "base.html" %}
{% block body %}
<form action="">
{% for account in account_list['account_list'] %}
<ul>
    <input type="checkbox" id="{{ account['id'] }}" value="{{ account['name'] }}" type="{{ account['type'] }}"> {{ account['name'] }} <br>
    {% for key, value in account.items() recursive %}
        {% if value is not string %}
            {% for acc in value %}
                {% if acc is mapping %}
                    <ul> 
                        <input type="checkbox" id="{{ acc['id'] }}" value="{{ acc['name'] }}" type="{{ acc['type'] }}"> {{ acc['name'] }} <br>
                        {% loop(acc.items()) %}
                    </ul>
                {% endif %}
            {% endfor %}
        {% endif %}
    {% endfor %}
</ul>
{% endfor %}
</form>
{% endblock %}

関連ドキュメント: http://jinja.pocoo.org/docs/templates/ (再帰を探してください)

4

2 に答える 2

2

変数loopは常に最も内側の (最も近い) ループを参照します。ここでは、ループを指します{% for acc in value %}{% for key, value in account.items() recursive %}外側のループを参照するには、次のように記述して、ループの直後に再バインドする必要があります。

{% set outer_loop = loop %}

次に、次を使用して、目的の結果を取得します

outer_loop(acc.items())
于 2012-11-08T08:44:06.970 に答える
0

外側のループはリストではなくマッピングを想定しているため、単に beに変更する必要があるでしょ(また、リストを呼び出すとエラーが発生します)。{% loop(acc.items()) %}{% loop(acc) %}.items

呼び出しを変更して問題解決する場合は、Jinja2 プロジェクトにバグを報告します。これは、黙って飲み込むのではなく、エラーで爆発するはずです (反復可能acc.items になるため)。

于 2012-10-26T17:53:46.313 に答える