Jinja2 - 传递变量来渲染

时间:2018-06-13 18:25:32

标签: python jinja2

我试图定义一个名为" body"的变量。然后将其传递给Jinja2模板的render语句。如果我在一个单独的行上定义变量然后使用只有变量名的render语句,我会收到一个错误。

示例代码:

from jinja2 import Environment, FileSystemLoader
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

env = Environment(loader=FileSystemLoader(THIS_DIR),
                         trim_blocks=True)
template =  env.get_template('test_template.html')
body = "test"
html_str = template.render(body)

以上代码出错:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

如果我在render语句的括号内定义变量,它就有效。

这有效,但它不是我想做的事情:

from jinja2 import Environment, FileSystemLoader
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

env = Environment(loader=FileSystemLoader(THIS_DIR),
                         trim_blocks=True)
template =  env.get_template('test_template.html')
html_str = template.render(body="test")

2 个答案:

答案 0 :(得分:1)

你应该使用

body = {"body":"test"}
html_str = template.render(body)

答案 1 :(得分:0)

您可以使用:

html_str = template(body=body)

等号的body是变量的名称,因为它将在模板内调用。等号右边的body是python代码中的变量名称