【问题标题】:Django template limit output of the for cyclefor循环的Django模板限制输出
【发布时间】:2014-01-15 17:53:55
【问题描述】:

所以我有一个模板:

{% 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 django-models django-templates django-views


    【解决方案1】:

    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_chapters_per_mange 确定每个Manga 模型的章节。

    您的第二个问题:Django 现在将Manga 对象的字符串表示形式与Manga.name 进行比较,这可能不一样。这可以解释为什么你需要truncatechars,尽管我不完全明白为什么。如果您在 Manga 模型上定义 __unicode__ 方法,则可以指定该模型的实例应如何显示为字符串(即 self.name)。

    【讨论】:

    • 我想过这一点,但我无法思考如何正确计算它,并且仅在模板中设置有限循环似乎是一个更简单的解决方案,但我认为这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多