# is not overwritten from Undefined in this class.
# This would cause a recursion error in Python 2.
class ChainableUndefined(Undefined):
- """An undefined that is chainable, where both
- __getattr__ and __getitem__ return itself rather than
- raising an :exc:`UndefinedError`:
+ """An undefined that is chainable, where both ``__getattr__`` and
+ ``__getitem__`` return itself rather than raising an
+ :exc:`UndefinedError`.
>>> foo = ChainableUndefined(name='foo')
>>> str(foo.bar['baz'])
...
jinja2.exceptions.UndefinedError: 'foo' is undefined
- .. versionadded:: 2.11
+ .. versionadded:: 2.11.0
"""
__slots__ = ()
+ def __html__(self):
+ return self.__str__()
+
def __getattr__(self, _):
return self
{%- for value in values recursive %}1{% else %}0{% endfor -%}
''')
assert tmpl.render(values=[]) == '0'
+
+ def test_markup_and_chainable_undefined(self):
+ from jinja2 import Markup
+ from jinja2.runtime import ChainableUndefined
+ assert str(Markup(ChainableUndefined())) == ''