Ответ 1
Вам нужно переключить {% block %}
и {% if %}
{% block messages %}
{% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}
У меня есть шаблон django, который используется во многих представлениях. В шаблоне есть блок для сообщений, используемых для уведомления пользователя о том, что должно привлечь их внимание. Независимо от того, отправлено сообщение или нет, зависит от вида. Некоторые представления могут отправлять переменную message
в шаблон, а другие - нет.
view_1:
message = "This is an important message"
render_to_response("my_template.html",
{'message':message, 'foo':foo, 'bar':bar},
context_instance = RequestContext(request))
view_2:
message = "This is an important message"
render_to_response("my_template.html",
{'foo':foo, 'bar':bar},
context_instance = RequestContext(request))
В шаблоне я проверяю переменную message
и включаю блок, как показано ниже:
base_template.html:
....
{% block main_body %}
{% block messages %}
{% endblock %}
{% block content %}
{% endblock %}
{% endblock %}
....
my_template.html:
{% extends base_template.html %}
....
{% if message %}
{% block messages %}
<div class='imp_msg'>{{ message }} </div>
{% endblock %}
{% endif %}
...
Проблема в том, что даже если view_2 не передает сообщение, последний html отображается с <div class='imp_msg'></div>
- в основном пустой div.
Поскольку этот CSS предназначен для создания фона light_red для сообщений, я вижу пустую панель light_red в верхней части страницы.
Я также попытался: {% ifnotequal message None %}
, {% ifnotequal message '' %}
, попытался установить message
в None
или ''
явно, но, похоже, не помогает.
Поблагодарили бы за помощь!
Вам нужно переключить {% block %}
и {% if %}
{% block messages %}
{% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}
Чтобы проверить, в операторе if вам нужно сравнить значение с None
, например:
{% if some_missing_var is None %}
// code here if some_missing_var exists
{% else %}
// code here if some_missing_var does not exist
{% endif %}
В других случаях (из документов):
Как правило, если переменная не существует, система шаблонов вставляет значение опции конфигурации engine_ifvald, которая по умолчанию имеет значение '' (пустая строка).
Я попробовал некоторые другие ответы, и они не работали, пока я не прочитал документы, и выше не стало ясно.
ссылка на документы, описывающие обработку недопустимых переменных