【发布时间】:2011-11-20 20:35:33
【问题描述】:
我想检查一个值是否属于 django 模板中的列表。像这样的
{% if value in ['Pass','Fail'] %}
我怎样才能做到这一点?
【问题讨论】:
我想检查一个值是否属于 django 模板中的列表。像这样的
{% if value in ['Pass','Fail'] %}
我怎样才能做到这一点?
【问题讨论】:
我不认为你可以直接在模板中定义一个列表。您可以将列表传递给模板并执行
{% if value in my_list %}
例如:
{% if name in 'foo,bar' %}
bla
{% endif %}
或者,您可以编写一个模板标签,它采用如下参数:
{% ifinlist value "val1,val2,val3" %}
【讨论】:
my_list并将其传递到模板中或如何编写ifinlist。
'foo,bar' 示例不适用/不正确,因为'foo,bar' 是一个字符串,而不是一个列表。
你可以把 if 条件写成
{% if value in 'Pass,Fail' %}
后端不需要模板标签或列表
【讨论】:
value = 'Pass',则“通过”是“通过,失败”的子字符串。
value 是否属于字符链。 OP 的问题是关于 list 而不是str。但是你是对的我错了,这是一个有效的方法,我会删除这个无用的帖子。
if 'a' in 'Pass,Fail' 将是 True 用于任一“项目”。因此,它仅适用于简单、不同的逗号分隔字符串。
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
【讨论】:
如何将列表传递给您的模板?我个人在这样的通用视图中使用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 %}">
【讨论】: