如标题所示,我关心的是如何将父 Jinja2 模板中设置的变量传递给其子模板。
项目的配置如下:
- 我正在使用 Tornado 构建 API。
- 在
app.py
脚本中,我关联了端点/parent
到 类ParentHandler
。当执行curl GET方法时,get()
类的方法ParentHandler
被执行并呈现其结果,response
(这是一个字典)到模板parent.html
。我想使用渲染的 HTML 代码作为标题 子模板,所以在parent.html
的末尾,有一个 block 显示子模板中的标签。 - 在
app.py
,我关联了端点'/child'
上课ChildHanlder
。当执行curl GET方法时,get()
类的方法ChildHandler
执行并呈现其结果,child_content
(这是一个字典)到模板child.html
(我没有在ParentHandler
中得到response
的ChildHandler
,因此ChildHandler
仅渲染child_content
)。模板child.html
包括parent.html
,所以我期望的行为是child.html
显示parent.html
中的 HTML 代码(使用response
提供的字典ParentHandler
中的值,而不是ChildHandler
)并渲染自己的字典child_content
。
不幸的是,当我尝试执行上述过程时,child.html
找不到response
来自parent.py
.
这是一个代码片段:
应用程序.py
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/parent', ParentHandler),
(r'/child', ChildHandler)
]
jinja_load = Jinja2Loader(os.path.join(PATH, '/templates'))
settings = {
'template_path': os.path.join(PATH, '/templates')
'template_loader': jinja_load
}
tornado.web.Application.__init__(self, handlers, **settings)
父级.py
class ParentHandler(tornado.web.RequestHandler):
def get(self):
response = {"status": "200", "val": "some_value"}
try:
self.render("parent.html", response=response)
except:
self.write(response)
child .py
class ChildHandler(tornado.web.RequestHandler):
def get(self):
response = {"status": "200", "data": "some_data"}
try:
self.render("child.html", child_content=response)
except:
self.write(response)
父级.html
<div>
{% if response['status'] == 200 %}
{% set val1 = response.get('val', 0) %}
<i>{{ val1 }}</i>
{% endif %}
</div>
{% block child_content %}{% endblock %}
child.html
{% include 'parent.html' %}
{% from 'parent.html' import val1 %}
{% block child_content %}
<table>
{% for d in data %}
<tr>
<td>{{ d }}</td>
</tr>
{% endfor %}
{% endblock %}
但是当我尝试渲染 child.html 时,我最终遇到了这个错误:
UndefinedError: 'response' is undefined
有人可以帮我吗?
最佳答案
您只需将 with
关键字添加到 include 语句中,如下所示:
{% include 'parent.html' with var1=value1, var2=value2, ... %}
就你的情况
{% include 'parent.html' with response=responseValue %}
关于python - Jinja2 中如何将变量从一个模板传递到另一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812272/