2017-02-03 4 views
0

// EDITНеверный блок тег

Я использую стандартный язык шаблонов, а не дзиндзя. Стандартный язык шаблонов не поддерживает тег set.

Как я могу объявить новую переменную с помощью jinja?

Вторая строка в следующем результате блока кода ошибки:

{% set msg_class = "" %} 

Сообщение об ошибке:

Неверный блок тегов в строке 13: «установить», ожидаемый «Элиф», «еще» или "endif". Вы забыли зарегистрировать или загрузить этот тег?

Остальной код:

{% if msg %} 
    {% set msg_class = "" %} 
    {% if status == 1 %} 
    {% set msg_class = "alert alert-success" %} 
    {% elif status == 3 %} 
    {% set msg_class = "alert alert-danger" %} 
    {% elif status == 4 %} 
    {% set msg_class = "alert alert-warning" %} 
    {% else %} 
    {% set status = 2 %} 
    {% set msg_class = "alert alert-info" %} 
    {% endif %} 
{% endif %} 

Использование массива, как в следующем потоке, который я нашел, кажется, действительно некрасиво мне. Это единственное решение?

Can a Jinja variable's scope extend beyond in an inner block?

+0

Вы уверены, что вы используете дзиндзя? Это ошибка со стандартного языка шаблонов Django. –

+0

Я думал, что если я использую код в html-шаблонах, он называется jinja? Я ошибаюсь? https://en.wikipedia.org/wiki/Jinja_(template_engine) – user2871190

+1

Да, вы ошибаетесь. Jinja - это отдельная система шаблонов, которая поддерживается Django, но не по умолчанию. Вы используете стандартный язык шаблонов, который хорошо документирован на сайте Django и не поддерживает тег 'set'. –

ответ

1

Почему бы не упростить это так?

{% set classes = ['success', 'info', 'danger', 'warning'] %} 
{% if status not in [1,3,4] %} 
    {% set status = 2 %} 
{% endif %} 
{% set msg_class = "alert alert-"+classes[status-1] %} 
+0

Спасибо, так лучше! Это не решение моей проблемы. – user2871190

+0

@jrbedar в двигателе django нет метки 'set' печально. Все думают, что они на самом деле jinja2. Это была моя причина, почему я искал ответ на эту проблему. – holms

2

Переменные в Django язык шаблонов можно использовать следующим образом:

{% with name="World" greeting="Hello" %}  
{{ greeting }} {{name}} 
{% endwith %} 

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#with

+0

Я тратил тридцать минут, пытаясь использовать блок «set» jinja2. Я не понимал, что шаблоны Django немного отличались от ванильного jinja2. Спасибо! – nanselm2