Обработка неопределенной переменной шаблона в 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 если он не существует?

  • Любое предложение использовать неблокирующий MySQL api на Tornado в Python3?
  • Торнадо: могу ли я запустить код после вызова self.finish () в асинхронном RequestHandler?
  • Как работает длительный опрос в «Торнадо»?
  • Могу ли я использовать Tornado + Celery + RabbitMQ + Redis?
  • Как я могу получить IP-адрес клиента запроса Tornado?
  • Как остановить веб-сервер Tornado?
  • Использование Tornado с Pika для мониторинга асинхронной очереди
  • Используя Tornado, как мне обслуживать статические файлы и служить favicon.ico из другого каталога, чем статический путь?
  • 4 Solutions collect form web for “Обработка неопределенной переменной шаблона в Tornado”

    Взлом с использованием locals().get() – это один из способов сделать это. Другой, немного более ортодоксальный, использует try . Шаблон Tornado поддерживает его, поэтому вы можете:

     {% try %} {% if logout_error %} Oops! The logout failed. Please close all open documents and try again {% end %} {% except %} {% end %} К {% try %} {% if logout_error %} Oops! The logout failed. Please close all open documents and try again {% end %} {% except %} {% end %} 

    Вы можете использовать

     {% if locals().get('logout_error', False) %} 

    Замените False значением, которое вы хотите, если свойство не установлено.

    {%, если locals (). get ('logout_error', False)%} не работает, потому что переменные не передаются как в ** kwargs;

    {% if globals (). has_key ('logout_error')%} работает для меня, потому что мои переменные передаются отдельно, https://groups.google.com/forum/#!topic/python-tornado/dyl50NO3yzE На этой странице больше дискуссия по этой проблеме.

    «Способ« Торнадо »- не иметь необъявленных переменных. Это более zen, чтобы объявить переменные явными.

    Временное решение:

     {% if 'grok' in globals() %} {{grok}} {% end %} {% if globals().get('grok_error', False) %} error message {% end %} 
    Python - лучший язык программирования в мире.