Django模板不像我期望的那样呈现模型

时间:2018-01-19 13:25:50

标签: python django

所以我有这个讲座课。现在,对于本课程,我有两个选择:“课程”和“研讨会”,我希望每次我向其中任何一个添加讲座时,模板将首先显示选择,然后是所有讲座。 示例:类将包含Lecture1,Lecture2,Lecture3等。 问题是,当我迭代时,每次选择显示,每次演讲,我希望每个选择只显示ONCE。

class Lecture(models.Model):
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures')
    lecture_category = models.IntegerField(choices=((0, "Classes "),
                                                    (1, "Seminars"),
                                                    ))
    lecture_title = models.CharField(max_length=100)
    content = models.TextField()
    link = models.URLField(blank=True)
    file = models.FileField(upload_to='documents', blank=True)

    def __str__(self):
        return self.lecture_title
 <ul>
        {% for c in lectures %}
           <b>{{ c.get_lecture_category_display }}</b>
            <p>.......................</p>
            <li>{{ c.lecture_title }}</li>
            <li>{{ c.content }}</li>
            {% if c.link %}
                <li>{{ c.link }}</li>

                {% if c.file %}
                    <li><a href='{{ MEDIA_URL }}{{ c.file.url }}'>download</a></li>
                {% endif %}
            {% endif %}
        {% endfor %}
        <hr/>
    </ul>

1 个答案:

答案 0 :(得分:3)

您可以使用名为regroup的模板标记。请参阅https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

上的重新组合部分
{% regroup lectures by lecture_category as category_list %}

<ul>
{% for category in category_list %}
    <li>{{ category.grouper }}
    <ul>
        {% for c in category.list %}
          <li>{{ c.lecture_title }}</li>
          <li>{{ c.content }}</li>
          ...etc
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

编辑: 正如Daniel Rosemen指出的那样,您还必须按照要在视图中重新组合的字段对查询进行排序。在这种情况下,您必须通过lecture_category订购讲座。上述方法不起作用。