在我的应用程序中,我有3个模型:问题,系列和字符。问题模型有一个系列ForeignKey和一个字符ManyToManyField。在这里他们被简化:Django模板循环迭代由不同的外键
class Character(models.Model):
name = models.CharField('Character name', max_length=200)
desc = models.TextField('Description', max_length=500)
class Series(models.Model):
name = models.CharField('Series name', max_length=200)
desc = models.TextField('Description', max_length=500)
class Issue(models.Model):
series = models.ForeignKey(Series, on_delete=models.CASCADE, blank=True)
name = models.CharField('Issue name', max_length=200)
number = models.PositiveSmallIntegerField('Issue number')
date = models.DateField('Cover date')
desc = models.TextField('Description', max_length=500)
characters = models.ManyToManyField(Character, blank=True)
cover = models.FilePathField('Cover file path', path="media/images/covers")
我有一个字符模板,显示有关字符的信息。我还想显示字符所在的问题,按系列排序。
{% extends "app/base.html" %}
{% block page-title %}{{ character.name }}{% endblock page-title %}
{% block content %}
<div class="description">
<p>{{ character.desc }}</p>
</div>
<div class="issues">
<h3>Issues</h3>
{% for series in character.issue_set.all %}
<div>
<a href="{% url 'app:series' series.id %}">{{ series.name }}</a>
<ul>
{% for issue in character.issue_set.all %}
{% if issue.series.name == series.name %}
<li>
<a href="{% url 'app:issue' issue.id %}"><img src="/{{ issue.cover }}" alt = "{{ series.name }}" ></a>
<a href="{% url 'app:issue' issue.id %}"><p>Issue #{{ issue.number }}</p></a>
</li>
{% endif %}
{% endfor %}
</ul>
</div>
{% endfor %}
</div>
{% endblock content %}
显然,这个格式目前的方式是,在集的每一个问题,它输出的一系列称号,并在集合那么每一个问题。
<div class="issues">
<h3>Issues</h3>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
</div>
这是我想看到的内容:
<div class="issues">
<h3>Issues</h3>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
</div>
我已经研究了模板相当多,而且我没有看到一个方法来获得基于不同的值的列表。我还尝试在我的角色或问题模型中创建一个新设置,我可以用它来替换issue_set.all
,但我还没有得到它的工作。
EDIT:在marcusshep的请求时,角色视图是使用通用的DetailView:
class CharacterView(generic.DetailView):
model = Character
template_name = 'app/character.html'
我可以看到你的视图,你传递'character' queryset到模板吗? – marcusshep
@marcusshep,用视图代码更新。 –
所以,要清楚你想让你的模板只显示具有不同名称的字符正确吗? – marcusshep