屏幕截图中的模型结构。我要像在sreen中一样在模板中构建结构。
在视野中我得到了对象:
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。
答案 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
时它将添加标题。