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

raj*_*pit 21 django django-templates

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

{%if ['Pass','Fail']%}中的值

我怎样才能做到这一点?

sch*_*eck 44

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

{% if value in my_list %}
Run Code Online (Sandbox Code Playgroud)

例如:

{% if name in 'foo,bar' %}
    bla
{% endif %}
Run Code Online (Sandbox Code Playgroud)

或者,您可以编写一个模板标记,其中包含以下参数:

{% ifinlist value "val1,val2,val3" %}
Run Code Online (Sandbox Code Playgroud)

  • @sunnyiitkgp,**ifinlist**默认情况下不存在于Django中.它可以是您自己可以编写的模板标签. (7认同)
  • 可以通过显示完整的解决方案来改进答案,即如何设置并将`my_list`传递给模板或如何编写`ifinlist`. (5认同)
  • 这里的“foo,bar”示例不适用/不正确,因为“foo,bar”是一个字符串,而不是一个列表。 (3认同)

小智 14

您可以将 if 条件写为

{% if value in 'Pass,Fail' %}

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

  • 实际上,仅当您不关心匹配子字符串时,这才有效。例如,对于任一“项目”,“如果“通过,失败”中的“a””将为“True”。因此,它仅适用于简单的、不同的逗号分隔字符串。 (3认同)
  • @YPCrumble 'Pass,Fail' 不是字符串列表,而是字符串本身。此方法用于测试“value”是否属于字符链。OP的问题是关于**列表**而不是``str```。但你是对的,我错了,这是一个有效的方法,我会删除这个无用的帖子。 (2认同)

Sad*_*rif 8

Django模板:

{% value|ifinlist:"val1,val2,val3" %}
Run Code Online (Sandbox Code Playgroud)

模板标签:

from django import template

register = template.Library()

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

  • 参数不应该被称为“list”——它隐藏了内置名称。 (3认同)