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 循环? [关闭]