Python returns "invalid syntax" 带有 Jinja2 设置标签

Python returns "invalid syntax" with Jinja2 set tag

我安装了 2.11.2 版的 Jinja2。

~]$ pip3 list
Package                            Version
---------------------------------- ------------------
Jinja2                             2.11.2

以及Python

的3.6.8版本
~]$ python --version
Python 3.6.8

我有一个名为 test.py 的 Python 脚本。这里是test.py.

的内容
from jinja2 import Template
name = "John Doe"
template = Template("Hello {{ name }}")
message = template.render(name=name)
print(message)

调用test.py成功,返回“李四”。

~]# python test.py
John Doe

我将 test.py 更新为具有以下内容。

import jinja2
{% set foo = 'bar' %}

当我调用 test.py 时,我收到“无效语法”。

~]$ python test.py
  File "testing.py", line 4
    {% set foo = 'bar' %}
     ^
SyntaxError: invalid syntax

据我所知,我对 set 标记使用的是有效语法,因此我不确定如何调试此问题。

{% set foo = 'bar' %} 不是有效的 python 代码,但您在 test.py 中使用了它。它可能是一个有效的 jinja2 代码,但你在这里混合了 python 和 jinja2..

这是因为 test.py 是由 Python 执行的文件,而不是 Jinja 解释的模板文件。 Python 解释器不知道如何解释 {% set foo = 'bar' %}

通常您的代码 (test.py) 需要从文件(例如 test.j2)加载 Jinja 格式的模板,然后使用 Jinja API 解释它。这是一个非常简单的例子:

test.py(Python代码):

from jinja2 import Template
name = "John Doe"
template = Template(open('test.j2').read()) # Read template from file test.j2
print(template.render(name=name))

test.j2(模板,在您 运行 代码所在的同一目录中):

Hello {{ name }}
{% set foo = 'bar' %}

请注意上面的代码并不理想(只是一般性地演示了 Jinja 的工作原理),您应该参考 https://jinja.palletsprojects.com/en/2.11.x/api/ and eventually https://jinja.palletsprojects.com/en/2.11.x/api/#loaders 如何正确加载模板并从您的代码中呈现它们。