【问题标题】:Django template execute on only first occurance of match in a for loopDjango模板仅在for循环中第一次出现匹配时执行
【发布时间】: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”来初始化变量之后,我收到的只是似乎表明这些方法不存在的错误消息。我将如何有效地实现此功能。

【问题讨论】:

    标签: python django for-loop django-templates


    【解决方案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 确实发生了变化,所以我想我会查看自定义标签
    猜你喜欢
    • 2021-04-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多