2010-06-25 91 views
14

想知道是否有方法来测试变量是否在django中的列表或字典中,使用内置的标签和过滤器。Django模板:测试变量是否在列表或字典

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

我没有看到它在该文档中,如果不将尝试一些自定义的,但我不想做一些已经完成。

感谢

回答

29

在Django的1.2,你可以做

{% if var in the_list %} 

,你在Python会。

否则是的,你需要一个自定义过滤器 - 这是一个三班轮虽然:

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

可以将列表是一样的模板:'{ %如果var在['item1','item2','item3']%}' – Sevenearths 2013-04-29 10:48:18

+3

@Sevenearths我刚刚尝试过并且可以确认,从Django 1.5.1开始,列表**不能在**中定义'如果'这样的陈述。 – Patrick 2013-06-25 16:33:09

+0

那我们怎么去做呢? – laycat 2013-06-26 01:04:12

0

想通过从模板分离串逗号?创建自定义templatetag:

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 %}