Как работает выражение «с» в Flask (Jinja2)?
В Python вы можете использоватьwith
утверждение как это (источник):
class controlled_execution:
def __enter__(self):
# set things up
return thing
def __exit__(self, type, value, traceback):
# tear things down
with controlled_execution() as thing:
# some code
В Flask / Jinja2 стандартная процедура использования флеш-сообщений следующая (источник):
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<!-- do stuff with `message` -->
{% endfor %}
{% endif %}
{% endwith %}
Я хотел бы знать, как{% with messages = get_flashed_messages() %}
работает с точки зрения синтаксиса.
Я не смог воссоздать его на чистом Python:
with messages = get_flashed_messages(): pass
повышенияSyntaxError
with get_flashed_messages() as messages: pass
повышенияAttributeError: __exit__
(Я импортировалget_flashed_messages
отflask
в обоих случаях).