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
)。

我考虑过这一点,但我很难正确地计算它,在模板中使用有限的循环似乎是一个更容易的解决方案,但我认为这是不可能的。