检查列表 django 模板中是不是存在

Posted

技术标签:

【中文标题】检查列表 django 模板中是不是存在【英文标题】:check for presence in a list django template检查列表 django 模板中是否存在 【发布时间】:2011-11-20 20:35:33 【问题描述】:

我想检查一个值是否属于 django 模板中的列表。像这样的

% if value in ['Pass','Fail'] %

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

我不认为你可以直接在模板中定义一个列表。您可以将列表传递给模板并执行

% if value in my_list %

例如:

% if name in 'foo,bar' %
    bla
% endif %

或者,您可以编写一个模板标签,它采用如下参数:

% ifinlist value "val1,val2,val3" %

【讨论】:

@sunnyiitkgp, ifinlist 默认情况下在 Django 中不存在。它可以是您自己编写的模板标签。 可以通过显示完整的解决方案来改进答案,即如何设置my_list并将其传递到模板中或如何编写ifinlist 这里的'foo,bar' 示例不适用/不正确,因为'foo,bar' 是一个字符串,而不是一个列表。【参考方案2】:

你可以把 if 条件写成

% if value in 'Pass,Fail' %

后端不需要模板标签或列表

【讨论】:

查看文档。你不能在 django 模板中这样做,你首先需要一个列表。 @EmilioConte 此方法适用于问题中的字符串列表,请参阅the docs on the in operator。例如,如果value = 'Pass',则“通过”是“通过,失败”的子字符串。 @YPCrumble 'Pass,Fail' 不是字符串列表,而是字符串本身。此方法用于测试value 是否属于字符链。 OP 的问题是关于 list 而不是str。但是你是对的我错了,这是一个有效的方法,我会删除这个无用的帖子。 这实际上仅在您不关心匹配子字符串时才有效。例如,if 'a' in 'Pass,Fail' 将是 True 用于任一“项目”。因此,它仅适用于简单、不同的逗号分隔字符串。【参考方案3】:

Django 模板:

% value|ifinlist:"val1,val2,val3" %

模板标签:

from django import template

register = template.Library()

@register.filter(name='ifinlist')
def ifinlist(value, list):
    return True if value in list else False

【讨论】:

【参考方案4】:

如何将列表传递给您的模板?我个人在这样的通用视图中使用extra_context 属性:


class MyObjectDetailView(DetailView):
    model = MyObject
    template_name = "path/to/object_detail.html"
    extra_context = 'DISABLED': [model.ACCEPTED, model.REFUSED]

然后在我的模板中,例如禁用btn:


<input class="btn"% if object.status in DISABLED % disabled="disabled"% endif %">

【讨论】:

以上是关于检查列表 django 模板中是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查列表中是不是存在数字,应用引擎模板

如何检查Django中是不是存在模板?

Django - 检查列表是不是包含模板中的某些内容

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

如何使用 Velocity 模板语言检查数组中是不是存在值

检查元素是不是在模型中 - Django 模板