jinja2,遇到一些循环和两个表对象的麻烦

时间:2018-08-23 21:36:27

标签: python html loops jinja2

这是我的代码:

<!-- Loop thru Table Macro begins-->
{% macro loopThruTable(currentParent, prod)%}
<li> {{prod.category_name}} </li>
{% set currentParent = prod.id %}
{{ checkParent(currentParent) }}
<ul>
<table>
    <tr>
        <th>Service</th>
        <th>Price</th>
    </tr>
    {{ checkParentService(currentParent)}}
</table>
</ul>
    {% endmacro %}
    <!-- Loop thru Table Macro ends-->
    <!-- CheckParent Macro begin-->
    {% macro checkParent(currentParent) %}
    {% for prod in myProd %}
    {% if prod.parent_category_id == currentParent %}
    <ul>
        {{ loopThruTable(currentParent, prod) }}
    </ul>
    {% endif %}
    {% endfor %}
    {% endmacro %}
    <!-- checkParent Macro Ends-->
    <!-- CheckParentService Macro begin-->
    {% macro checkParentService(currentParent) %}
    {% for serv in myServ %}
    {% if serv.parent_category_id == currentParent %}
    <tr>
        {{ loopThruTableService(currentParent, serv.name) }}
        {{ loopThruTableService(currentParent, serv.price) }}
    </tr>
{% endif %}
{% endfor %}
{% endmacro %}
<!-- checkParent Macro Ends-->
<!-- Loop thru Table Macro begins-->
{% macro loopThruTableService(currentParent, blah) %}
<td>{{blah}}</td>
{% endmacro %}
<!-- Loop thru Table Macro ends-->
{% extends 'admin/master.html' %}

{% block body %}

<ul>
    {% set parent = 0 %}
    {{ checkParent(parent) }}
</ul>

{% endblock %}

出于所有意图和目的,它在大多数情况下正确运行,但是它在每个循环的末尾添加了一个额外的表。

enter image description here

从底部可以看到,有一个“ ServicePrice”将每个类别分开。

enter image description here

这是另一个例子。我知道这与我的循环有关,但是就jinja2而言,我不知道是否存在一种方法可以检查父对象是否“存在”于我的对象中。

谢谢

1 个答案:

答案 0 :(得分:0)

我知道了。

我必须在loopThruTable宏中添加一个额外的for循环和if语句。

现在看起来像这样:

{% macro loopThruTable(currentParent, prod)%}
<li> {{prod.category_name}} </li>
{% set currentParent = prod.id %}
{{ checkParent(currentParent) }}
{% for serv in myServ %}
{% if serv.parent_category_id == currentParent %}
    <table>
            <tr>
                <th>Service</th>
                <th>Price</th>
            </tr>
            {{ checkParentService(currentParent)}}
    </table>
{% endif %}
{% endfor %}
{% endmacro %}

我仍然不确定为什么是否有效。但这有效。