Обработка переменной шаблона undefined в Tornado
Это шаблон торнадо (скажем, в файле logout.html). Я выдаю ошибку в процессе выхода из системы:
{% if logout_error %}
Oops! The logout failed. Please close all open documents and try again
{% end %}
Это можно вызвать с помощью
self.render("logout.html", logout_error=True)
Если выход завершен, я должен выполнить
self.render("logout.html", logout_error=False)
Если я игнорирую logout_error=False
, я получаю
NameError: global name 'logout_error' is not defined
Если существует много флагов (которые являются ложными), аргументы ключевого слова могут накапливаться. Есть ли способ, которым я могу попросить шаблон рассмотреть logout_error
как False
, если он не существует?
Ответы
Ответ 1
Взлом с использованием locals().get()
- это один из способов сделать это. Другой, немного более ортодоксальный, использует try
. Шаблон Tornado поддерживает его, поэтому вы можете:
{% try %}
{% if logout_error %}
Oops! The logout failed. Please close all open documents and try again
{% end %}
{% except %}
{% end %}
Ответ 2
Вы можете использовать
{% if locals().get('logout_error', False) %}
Замените False
на нужное значение, если свойство не установлено.
Ответ 3
{%, если locals(). get ('logout_error', False)%} не работает, потому что переменные не передаются как в ** kwargs;
{% if globals(). has_key ('logout_error')%} работает для меня, потому что мои переменные передаются отдельно,
https://groups.google.com/forum/#!topic/python-tornado/dyl50NO3yzE на этой странице больше внимания не уделяется этой проблеме.
Ответ 4
"Способ Tornado" состоит в том, чтобы не иметь необъявленных переменных. Это более zen, чтобы объявить переменные явными.
Обход проблемы:
{% if 'grok' in globals() %}
{{grok}}
{% end %}
{% if globals().get('grok_error', False) %}
error message
{% end %}