Django模板限制for循环的输出
所以我有一个模板:Django模板限制for循环的输出,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,所以我有一个模板: {% for Chapter in latest_chapter_list %} {% ifequal Chapter.manga|truncatechars:20 Manga.name|truncatechars:20 %} {{Chapter.chapter}} {% endifequal %}
{% for Chapter in latest_chapter_list %}
{% ifequal Chapter.manga|truncatechars:20 Manga.name|truncatechars:20 %}
{{Chapter.chapter}}
{% endifequal %}
{% endfor %}
型号:
class Manga(models.Model):
name = models.CharField(max_length=20,help_text='Name of the comic/manga')
class Chapter(models.Model):
manga = models.ForeignKey(Manga)
chapter = models.IntegerField(default=1, help_text='Number of a chapter')
所以我想要的是模板只显示5个项目,而不是所有通过if的项目。在普通代码中,我会添加一个临时值,对每次加法和以后的重置进行计数,但我是django新手,不知道如何处理这个问题。
而且我也不明白为什么我的if只在我把两个名字都剪成相同长度时才起作用,即使它们应该是相同的长度,不是吗
此外,我认为:
def index(request):
latest_item_list = Manga.objects.all().order_by('-added_on')[:5]
latest_chapter_list = Chapter.objects.all().order_by('-chapter')
context = {'latest_item_list': latest_item_list,
'latest_chapter_list': latest_chapter_list
}
return render(request, 'Item/index.html', context)
任何帮助或提示都将不胜感激
编辑,解决方案:在视图中创建新的筛选列表:
latest_chapter_list_short = Chapter.objects.filter(chapter__lt=6)
并通过它迭代,而不是完整的列表 Django在其模板中的功能有限,因此只对希望显示的元素进行迭代比较容易。例如,可以准备视图中的数据,使其仅包含五个元素:
latest_item_list = Manga.objects.all().order_by('-added_on')[:5]
chapters = Chapter.objects.all().order_by('-chapter')
latest_chapter_per_mange = compute_chapters_per_mange(chapters, latest_item_list)
其中,compute\u chapters\u per\u mange
确定每个Manga
模型的章节
您的第二个问题:Django现在正在比较
Manga
对象的字符串表示形式与Manga.name
对象的字符串表示形式,后者可能不同。这可以解释为什么需要truncatechars
,尽管我不完全明白为什么。如果您在漫画
模型上定义了\uuuuunicode\uuucode>方法,那么您可以指定该模型的实例应如何显示为字符串(即,self.name
)。我考虑过这一点,但我很难正确地计算它,在模板中使用有限的循环似乎是一个更容易的解决方案,但我认为这是不可能的。