检查列表 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 模板中是不是存在的主要内容,如果未能解决你的问题,请参考以下文章