在Python中,您可以使用with
这样的语句(source):
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中,使用flash消息的标准过程如下(source):
{% 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
。
答案 0 :(得分:5)
Flask中的with
语句与Python中的with
语句不同。
在python中,等效的是:
messages = get_flashed_messages()
答案 1 :(得分:1)
{% with %}
语句可让您定义变量,但使用{% endwith %}
声明。例如:
{% with myvar=1 %}
...
{% endwith %}
主体中声明的任何元素都可以访问myvar变量。
请参考-https://www.webforefront.com/django/usebuiltinjinjastatements.html