正如标题中所指定的,我关心的是如何将父Jinja2模板中的变量集传递给其子模板。
项目的配置如下:
app.py
脚本中,我将端点/parent
与。{
班ParentHandler
。当执行curl GET方法时,get()
执行类ParentHandler
的方法并呈现其结果,
模板response
的{{1}}(dict)。我想使用渲染的HTML代码作为标题
子模板,所以在parent.html
的末尾,有一个块
显示子模板中的标签。parent.html
中,我将端点app.py
与类'/child'
相关联。执行curl GET方法时,将执行类ChildHanlder
的{{1}}方法,并将其结果get()
(这是一个字典)呈现给模板ChildHandler
(我child_content
未收到child.html
ParentHandler
,因此response
仅呈现ChildHandler
)。模板ChildHandler
包含child_content
,因此我期待的行为child.html
显示来自parent.html
的HTML代码(来自dict {{1}的值由child.html
提供,而不是parent.html
)并提供自己的字典response
。 不幸的是,当我尝试执行上述过程时,ParentHandler
无法从ChildHandler
找到child_content
。
这是一个代码段:
app.py
child.html
parent.py
response
child.py
parent.py
parent.html
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)
child.html
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.html时,我最终会遇到此错误:
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)
有人可以帮我吗?
答案 0 :(得分:1)
您只需要将with
关键字添加到include语句中,如下所示:
{% include 'parent.html' with var1=value1, var2=value2, ... %}
在你的情况下
{% include 'parent.html' with response=responseValue %}
答案 1 :(得分:0)
我最终放弃了我原来的想法,决定采用@Strinnityk的解决方案。
我更改了child.py
的输出,并使用parent.py
的输出更新了它。
这样,我甚至不需要在child.html
模板中使用变量。
再次感谢!