没有重复的Django排序

时间:2018-09-24 13:41:37

标签: django django-templates django-views

屏幕截图中的模型结构。我要像在sreen中一样在模板中构建结构。

screen

在视野中我得到了对象:

class ArticleDetailView(DetailView):
        model = Article
        template_name = 'info_detail.html'

    def get_context_data(self, *args, **kwargs):
    context = super(ArticleDetailView, self).get_context_data(*args, **kwargs)
    context['article'] = self.get_object()
    return context 

型号

class Article(models.Model):
        news = models.ManyToManyField(News)

class News(models.Model):
          type = models.ForeignKey(Type)
          title = models.CharField(max_length=100)

class Type(models.Model):
          name = models.CharField(max_length=100)

模板:

{% for news in article.news.all %}
   <p>{{ news.type.name }}</p>
    <p>{{ news.title }}</p>
{% endfor %}

如果在模板中我将循环用于->我具有如下结构:type1:新闻1;类型1:新闻2;类型2:新闻3。

1 个答案:

答案 0 :(得分:0)

向您的News类添加默认顺序:

class News(models.Model):

    (...)
    class Meta:
        ordering = ['type', 'title']

然后在模板的forloop中:

{% for news in article.news.all %}
    {% ifchanged news.type %}
        {% if forloop.counter != 1 %}</ul>{% endif %}
        <h2>{{ news.type.name }}</h2>
        <ul>
    {% endifchanged %}
    <li>
        {{ news.title }}
    </li>
 {% endfor %}
 </ul>

由于News对象是按type排序的,因此每次遇到新的type时它将添加标题。