“with”语句如何在Flask(Jinja2)中起作用?

时间:2015-04-09 21:19:57

标签: python flask jinja2

在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

2 个答案:

答案 0 :(得分:5)

Flask中的with语句与Python中的with语句不同。

在python中,等效的是:

messages = get_flashed_messages()

答案 1 :(得分:1)

Jinja中的

{% with %}语句可让您定义变量,但使用{% endwith %}

限制变量的范围

声明。例如:

{% with myvar=1 %}
...
{% endwith %} 

主体中声明的任何元素都可以访问myvar变量。

请参考-https://www.webforefront.com/django/usebuiltinjinjastatements.html