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

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: django django-templates


    【解决方案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 %}">
      
      

      【讨论】:

        猜你喜欢
        • 2011-09-07
        • 1970-01-01
        • 2021-07-02
        • 2011-01-26
        • 2019-07-05
        • 2011-10-26
        • 2020-06-15
        • 2019-09-01
        • 2013-06-07
        相关资源
        最近更新 更多