如何在Jinja2中将变量从一个模板传递到另一个模板

时间:2017-08-22 08:11:18

标签: python jinja2 tornado

正如标题中所指定的,我关心的是如何将父Jinja2模板中的变量集传递给其子模板。

项目的配置如下:

  • 我正在使用Tornado构建API。
  • 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)

有人可以帮我吗?

2 个答案:

答案 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模板中使用变量。

再次感谢!