Это потому, что mako
по умолчанию использует объект Undefined
, который завершается с ошибкой только при визуализации, но может использоваться в логических выражениях, поскольку реализует метод __nonzero__
:
class Undefined(object):
"""Represents an undefined value in a template.
All template modules have a constant value
``UNDEFINED`` present which is an instance of this
object.
"""
def __str__(self):
raise NameError("Undefined")
def __nonzero__(self):
return False
UNDEFINED = Undefined()
Чтобы использовать неопределенное значение, которое не срабатывает даже в логических выражениях, вы можете использовать strict_undefined
аргумент следующим образом:
>>> from mako.template import Template
>>> mytemplate = Template("""%if x>5:
... <h1>helloworld</h1>
... %endif""", strict_undefined=True)
>>> mytemplate.render()
...
NameError: 'x' is not defined
Обратите внимание, что strict_undefined
доступен как в mako.template.Template
, так и в mako.lookup.TemplateLookup
.
Описание из документации :
Заменяет автоматическое использование UNDEFINED для любых необъявленных переменных, не находящихся в контексте, немедленным вызовом NameError. Преимущество заключается в немедленном сообщении об отсутствующих переменных, которые включают имя. Новое в версии 0.3.6.