到目前为止,我在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
艾伦。
答案 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 %}
不是有效的智能标记。所有受支持的运营商均为:
or
,and
,in
,=
(或==
),!=
,>
,>=
,<
和<=
。
答案 1 :(得分:2)
如上所述,您无法在{% if %}
标记中使用运算符。它只接受布尔值(您可以AND
,OR
和NOT
一起使用。)
对于简单相等,您可以使用{% 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)