2011-08-01 177 views
0

我有这样的代码情况Django的模板过滤器

{%,如果1 |在 '7,10' %floatformat} 是 {%其他%} 没有 {%ENDIF%}

的返回结果始终设置为“是”,如何使结果返回“否” 请大家帮忙。 感谢

+0

即时对不起,我必须澄清'7,10'是数据库查询结果是价值7,10(数字分隔逗号) – Adit

回答

0

1|floatformat回报1和条件检查1'7,10',因为Django的认为'7,10',因为它返回True一个字符串。尝试传递一个列表,它将不会返回

1

很难从你的例子中发现这里究竟发生了什么,因为你用虚拟数据代替了真正从数据库中出来的东西。如你所写,结果将始终为“是”,因为字符串'7,10'包含字符串'1'。

听起来像你想达到什么是:

如果这个数字是在此列表中,那么是的,否则就没有。

让我们改写这个模板是一个小更真实:

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

这假定:

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

我不确定你使用的是什么f loatformat for在这种情况下。

如果上述断言不正确,并且您必须使用字符串,那么您的工作就会更加困难,并且您应该在服务器端处理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 %}将不再返回一个假阳性,因为它不是做一个字符串匹配,它做列表成员。

+0

感谢伊丹Gazit,这正是我的意思。我会试着解决这个问题。谢谢 – Adit

+0

Adit:如果你发现我的帖子有帮助,那么请upvote或接受它! –