Подтвердить что ты не робот

Как проверить, определена ли переменная шаблона django?

У меня есть шаблон 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 или '' явно, но, похоже, не помогает.

Поблагодарили бы за помощь!

4b9b3361

Ответ 1

Вам нужно переключить {% block %} и {% if %}

{% block messages %}
    {% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}

Ответ 2

Чтобы проверить, в операторе 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, которая по умолчанию имеет значение '' (пустая строка).

Я попробовал некоторые другие ответы, и они не работали, пока я не прочитал документы, и выше не стало ясно.

ссылка на документы, описывающие обработку недопустимых переменных