Django递归模板渲染期间的运行时错误

时间:2019-02-08 13:16:41

标签: python django django-templates

我想实现Django递归模板渲染,以获取用户及其下属。但是,我在/ admin / users / 3有一个ErrorRuntimeError 实例检查中超过了最大递归深度。我正在使用django 1.9。代码在下面给出

输入如下:[{name: 'user1@mail.com', id: 1, next: True}, {name: 'user2@mail.com', id: 2, next: True}, {name: 'user3@mail.com', id: 3, next: False}]

users_hierarchy.html

<ul>
{% for user in users %}
    <li>{{ user.name }}</li>
    {% if user.next %}
        <ul>
           {% include 'users/user_hierarchy.html' with data=user %}
        </ul>
    {% endif %}
{% endfor %}

我希望使用HTML,例如:

<ul>
<li>user1@mail.com
    <ul>
        <li>user2@mail.com
    <ul>
         <li>user3@mail.com</li>
    </ul>
        </li>  
    </ul>
</li>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我解释了为什么您要无限递归

来自djanto include template docs

  

包含的模板在包含它的模板的上下文中呈现。

这意味着您要一次又一次地遍历users

<ul>
{% for user in users %}                 <-----(1)<------------------------<
    <li>{{ user.name }}</li>                                              |
    {% if user.next %}                                                    |
        <ul>                                                              |
           {% include 'users/user_hierarchy.html' with data=user %} --(2)->

在(1),您遍历users。第一次迭代时,您称为include(2)。此时,您转到(1)(在嵌套的包含模板中)并再次开始迭代。