django模板过滤器

时间:2011-08-01 05:52:37

标签: django templates

我有这个代码情况

{%if 1 | floatformat in'7,10'%}    是 {%else%}    没有 {%endif%}

返回结果始终设置为“yes”,如何使结果返回“no” 请帮忙。 感谢

2 个答案:

答案 0 :(得分:1)

很难从你的例子中得出究竟发生了什么,因为你正在用虚拟数据代替真正来自数据库的内容。

正如您所写,结果将始终为“是”,因为字符串'7,10'包含字符串'1'。

听起来就像你想要实现的那样:

  

如果此号码在此列表中,则为是,否则为否。

所以让我们重写一下这个模板更加真实:

{% if mynumber in yeslist %} yes {% else %} no {% endif %}

这假定:

  • mynumber是一个数字
  • yeslist是一个数字列表

在这种情况下,我不确定你使用的是floatformat。

如果上述断言不正确,并且你必须使用字符串,那么你的工作要困难得多,你应该在服务器端处理yeslist。例如,如果yeslist只是一个像“7,10,123,93,9,19,83”这样的字符串,那么在模板中确定数字8是否在列表中将是不必要的困难。在你看来更容易做到:

def myview(request):
    ctx = {}
    # ... do some work ...
    # yeslist now has a string like "7,10,123,93,9,19,83"
    ctx['yeslist'] = yeslist.split(',')
    # ... do more work, and render the response ...

现在,{% if '8' in yeslist %}将不再返回误报,因为它没有进行子字符串匹配,它正在进行列表成员资格。

答案 1 :(得分:0)

1|floatformat返回1,条件检查1是否在'7,10',因为django将'7,10'视为字符串,返回True。尝试传递一个列表,它将不返回