模板渲染错误,类别显示2次

时间:2018-01-18 16:19:25

标签: python django

所以我试图在一个模板中渲染我的模型,但只有一个小东西显示的次数超出了我的预期。我只想让类别名称在很多讲座中展示一次。我只是想知道修改模板代码的位置。

enter image description here

<ul>
        {% for a in categories %}
            {% for c in lectures %}
                {% if a == c.course_category %}
                    <li><strong>{{ a.course_category }}</strong></li>
                {% endif %}
                {% if a == c.course_category %}
                    <li>{{ c.lecture_title }}</li>
                    <li>{{ c.content }}</li>
                    {% if c.link %}
                        <li>{{ c.link }}</li>
                    {% endif %}
                    {% if c.file %}
                        <li><a href='{{ MEDIA_URL }}{{ c.file.url }}'>download</a></li>
                    {% endif %}
                {% endif %}
            {% endfor %}
            <hr/>
        {% endfor %}
    </ul>

1 个答案:

答案 0 :(得分:2)

您应该将{{ a.course_category }}移出内循环,这样您只需为每个类别显示一次。

    {% for a in categories %}
        <li><strong>{{ a.course_category }}</strong></li>
        {% for c in lectures %}
            <li>{{ lecture.lecture_title }}</li>
        {% endfor %}
    {% endfor %}

然而,循环每个类别的每个讲座都是低效的。根据您的型号,您应该可以执行以下操作:

{% for category in categories %}
    <li><strong>{{ category.course_category }}</strong></li>
    {% for lecture in category.lecture_set.all %}
         <li>{{ lecture.lecture_title }}</li>
    {% endfor %}
{% endfor %}

或者您可以循环阅读讲座,并使用{% ifchanged %}标记来显示类别。

{% for lecture in lectures %}
    {% ifchanged lecture.course_category %}
        <li><strong>{{ lecture.course_category }}</strong></li>
    {% endifchanged %}
    <li>{{ lecture.lecture_title }}</li>
{% endfor %}