【问题标题】:django 'if' statement improperly formatteddjango 'if' 语句格式不正确
【发布时间】:2009-12-20 20:17:54
【问题描述】:

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

'if' statement improperly formatted

引发错误的模板如下:

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

在上下文中有一个和差异的视图是这样的:

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、>、>=、==.. 中使用什么等式并不重要。它们都会引发相同的错误。

据我所知:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#id5

艾伦。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    直到 Django 1.2 登陆您正在寻找的 "Smart If", a Django Template Tag

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

    在保留当前 Django 功能的同时,它还处理 平等, 大于和小于运算符。一些常见的案例::

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

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

    所有支持的运算符为:orandin=(或 ==)、!=&gt;&gt;=&lt;&lt;=

    【讨论】:

    • 谢谢!那我再想点别的,等 1.2 吧!
    • 使用标签即可。加载它们真的很容易(它在文档中),然后当 1.2 发布时,您的代码已经兼容,您可以删除标记代码。
    【解决方案2】:

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

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

    原因是将“逻辑”推出模板并进入模型层。 IE。你的模型应该有这样的方法:

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

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

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

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

    positive_diff = diff >= 0
    

    【讨论】:

      【解决方案3】:

      你需要用 endif 结束每个 if 语句

      {% if var1 %}

      {{ var1|safe }} 
      

      {% else %}

      {% if var2 %}

      {{ var2|safe }}
      

      {% else %}

      {% if var3 %}

      {{ var3|safe }}
      

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

      【讨论】:

        【解决方案4】:

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

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

        编辑:查看 == operator 上方

        【讨论】:

          猜你喜欢
          • 2011-06-21
          • 1970-01-01
          • 2015-05-14
          • 2010-10-07
          • 2022-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多