django'if'语句格式不正确

时间:2009-12-20 20:17:54

标签: django django-templates

到目前为止,我在django中得到了最奇怪的错误:

'if' statement improperly formatted

引发错误的模板是:

{% if diff >= 0 %}
<span class="pos">+{{ diff }}
{% else %}
<span class="neg">-{{ diff }}
{% endif %}
</span>
<span>{{ a }}</span>

在上下文中有一个和diff的视图是:

def add(request, kaart_id):
    if request.is_ajax() and request.method == 'POST':
        x = Kaart.objects.get(id=kaart_id)
        x.pos += 1
        x.save
        x = Kaart.objects.get(id=kaart_id)      
        from django.utils import simplejson
        diff = x.pos - x.neg
        a = "(+1)"
        context = { 'diff':diff, 'a':a }
        return render_to_response('sum.html', context, context_instance=RequestContext(request))

在if,&gt;,&gt; =,==中使用哪个等式并不重要。它们都会引发相同的错误。

至于我可以通过这本书告诉所有人:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#id5

艾伦。

4 个答案:

答案 0 :(得分:7)

在Django 1.2登陆之前,你正在寻找"Smart If", a Django Template Tag

  

django的更智能{%if%}标记   模板。

     

在保留当前Django功能的同时,它也可以处理   平等,       大于和小于运营商。一些常见的案例::

    {% if articles|length >= 5 %}...{% endif %}
    {% if "ifnotequal tag" != "beautiful" %}...{% endif %}
     

参数和运算符必须在它们之间有空格,所以       {% if 1>2 %}不是有效的智能标记。

     

所有受支持的运营商均为:orandin=(或   ==),!=>>=<<=

答案 1 :(得分:2)

如上所述,您无法在{% if %}标记中使用运算符。它只接受布尔值(您可以ANDORNOT一起使用。)

对于简单相等,您可以使用{% ifequal val1 val2 %}标记。

原因是将“逻辑”推出模板并进入模型层。即你应该在模型上有一个方法:

def positive_diff(self):
   return self.diff >= 0

然后在你的模板中调用它:

{% if x.positive_diff %} ... {% endif %}

或者,您可以在视图中设置一个额外的变量:

positive_diff = diff >= 0

答案 2 :(得分:1)

您需要使用endif

关闭每个if语句

{% if var1 %}

{{ var1|safe }} 

{% else %}

{% if var2 %}

{{ var2|safe }}

{% else %}

{% if var3 %}

{{ var3|safe }}

{% endif %}{% endif %}{% endif %}

答案 3 :(得分:0)

“智能if”标签刚刚添加到开发版本中(最终将变为1.2)。

如果您使用的是稳定版本(1.1.x或更早版本),则无法在“if”模板标记中使用这些比较运算符。

修改:在== operator

上方查看