【问题标题】:Django templates: testing if variable is in list or dictDjango模板:测试变量是否在列表或字典中
【发布时间】:2011-03-08 06:49:18
【问题描述】:

想知道是否有一种方法可以使用内置标签和过滤器测试变量是否在 django 中的列表或字典中。

即:{% if var|in:the_list %}

我在文档中看不到它,如果没有,我会尝试一些自定义的东西,但我不想做已经做过的事情。

谢谢

【问题讨论】:

    标签: django templates


    【解决方案1】:

    在 Django 1.2 中,您可以这样做

    {% if var in the_list %}
    

    就像在 Python 中一样。

    否则是的,您将需要一个自定义过滤器 - 但它是一个三线过滤器:

    @register.filter
    def is_in(var, obj):
        return var in obj
    

    【讨论】:

    • 列表可以在模板中,如:{% if var in ['item1','item2','item3'] %}
    • @Sevenearths 我刚试过,可以确认,从 Django 1.5.1 开始,列表不能if 语句中定义。
    • 那我们该怎么做呢?
    • @laycat:我们必须与上下文中给出的列表变量进行比较。顺便说一句:如何完全避免 Django 模板语言??
    【解决方案2】:

    想要从模板中传递一个逗号分隔的字符串?创建自定义模板标签:

    from django import template
    register = template.Library()
    
    @register.filter
    def in_list(value, the_list):
        value = str(value)
        return value in the_list.split(',')
    

    你可以这样称呼它:

    {% if 'a'|in_list:'a,b,c,d,1,2,3' %}Yah!{% endif %}
    

    它也适用于变量:

    {% if variable|in_list:'a,b,c,d,1,2,3' %}Yah!{% endif %}
    

    【讨论】:

      【解决方案3】:

      在 Django 3 中... 很简单:

      someHtmlPage.html

      <html>
          {%if v.0%}
              <p>My string {{v}}</p>
          {%else%}
              <p>My another typy {{v}}</p>
          {%endif%}
      </html>
      

      【讨论】:

      • 这个答案没有回答问题。在您的答案示例中,您正在访问数组中的一个位置,而不是所有位置。
      猜你喜欢
      • 2011-10-02
      • 2018-09-27
      • 2013-12-20
      • 1970-01-01
      • 2012-11-13
      • 2011-08-12
      • 2011-01-05
      • 2014-02-01
      • 2015-11-25
      相关资源
      最近更新 更多