1

我想在网页中显示字典的内容。字典结构是递归的。我不能让它像那样工作。相反,我必须“手动展开”递归。可能,我没有正确理解文档。

不使用递归的代码(并且有效)。

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

可能需要更改{% loop(acc.items()) %}为简单{% loop(acc) %}的,因为外部循环需要映射,而不是列表(并且调用.items列表将导致错误。)

如果更改调用确实解决了问题,那么我将在 Jinja2 项目中提交一个错误 - 这应该会因错误而爆炸,而不是默默地吞下它(因为acc.items 是一个可迭代的)。

于 2012-10-26T17:53:46.313 回答