Django 'если' заявление неправильно отформатировано - PullRequest
1 голос
/ 20 декабря 2009

Я получаю странную ошибку в 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,>,> =, == .. они все вызывают одну и ту же ошибку.

и, насколько я могу судить по книге: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#id5

Алан.

Ответы [ 4 ]

7 голосов
/ 20 декабря 2009

Пока Django 1.2 не приземлится, вы ищете "Умное If", тег шаблона Django .

Умный тег {% if%} для django шаблоны.

Сохраняя текущие функциональные возможности Django, он также обрабатывает равенство, больше и меньше чем операторы. Некоторые общие примеры случаев: *

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

Аргументы и операторы должны иметь пробел между ними, поэтому {% if 1>2 %} недопустимый смарт-тег if.

Все поддерживаемые операторы: or, and, in, = (или ==), !=, >, >=, < и <=.

2 голосов
/ 21 декабря 2009

Как уже упоминалось, вы не можете использовать операторы в теге {% if %}. Он принимает только логические значения (которые вы можете AND, OR и NOT вместе.)

Для простого равенства вы можете использовать тег {% ifequal val1 val2 %}.

Причина в том, чтобы вытолкнуть «логику» из шаблона в слой модели. То есть у вас должен быть метод для вашей модели, например:

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

Затем назовите это в вашем шаблоне:

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

Или, вы можете установить дополнительную переменную в вашем представлении:

positive_diff = diff >= 0
1 голос
/ 20 декабря 2009

Вам нужно закрыть каждый оператор if с помощью endif

{% if var1 %}

{{ var1|safe }} 

{% else %}

{% if var2 %}

{{ var2|safe }}

{% else %}

{% if var3 %}

{{ var3|safe }}

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

0 голосов
/ 20 декабря 2009

Тег «умный if» был только что добавлен в версию для разработчиков (которая в итоге станет 1.2).

Если вы используете стабильную версию (1.1.x или более раннюю), вы не сможете использовать эти операторы сравнения в теге шаблона if.

Редактировать: выглядеть просто над оператором ==

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...