Django模板仅在for循环中第一次出现匹配时执行

Posted

技术标签:

【中文标题】Django模板仅在for循环中第一次出现匹配时执行【英文标题】:Django template execute on only first occurance of match in a for loop 【发布时间】:2018-09-08 08:42:53 【问题描述】:

我有一个带有指向文档的外键的视频表(多个视频指向一个文档)。我想检查该列表的每个元素,并在第一次与查询匹配时,启用一个元素(指向其他地方的按钮)。我的尝试是使用 for 循环,然后使用 if 语句,这样:

% for vid in doc.video_set.all %
    % if vid.query_data == 'match_term' %
    <-- button/link stuff -->
        % initialize variable %
    % endif %
% endfor %

我的想法是,如果我初始化了一个变量,我可以在 if 语句中添加 if “and variable is None” 并防止将来显示。然而,在尝试使用“set”和“with”来初始化变量之后,我收到的只是似乎表明这些方法不存在的错误消息。我将如何有效地实现此功能。

【问题讨论】:

【参考方案1】:

Django 模板语言不允许你像这样设置变量。您的问题有点令人困惑,因为您试图展示如何在 Django 模板中实现它,而不是展示您希望模板显示的内容。这里有几个建议:

如果match_term 是常量,您可以在模型中添加一个方法。

class Doc(models.Model):
    def first_match(self):
        return self.video_set.filter(query_data='match_term').first()

然后在模板中使用 doc.first_match

如果match_term 发生变化,那么您可能需要编写custom template tag。

【讨论】:

页面上的 match_term 确实发生了变化,所以我想我会查看自定义标签

以上是关于Django模板仅在for循环中第一次出现匹配时执行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中使用这个 for 循环? [关闭]

django 模板中{%for%}的使用

图像未出现在 Django 模板 For Loop 中

如何在 Django 2.1 中的模板内的 for 循环内设置变量?

Django模板中的for循环

Django模板 - 查找列表中的至少一项是不是出现在其他列表中