有没有办法将变量传递给 Jinja2 父母?
Posted
技术标签:
【中文标题】有没有办法将变量传递给 Jinja2 父母?【英文标题】:Is there a way to pass variables into Jinja2 parents? 【发布时间】:2012-12-24 15:02:59 【问题描述】:我正在尝试将一些变量从子页面传递给模板。这是我的python代码:
if self.request.url.find("&try") == 1:
isTrying = False
else:
isTrying = True
page_values =
"trying": isTrying
page = jinja_environment.get_template("p/index.html")
self.response.out.write(page.render(page_values))
模板:
<html>
<head>
<link type="text/css" rel="stylesheet" href="/css/template.css"></link>
<title> title | SST QA</title>
<script src="/js/jquery.min.js"></script>
% block head %% endblock head %
</head>
<body>
% if not trying %
<script type="text/javascript">
// Redirects user to maintainence page
window.location.href = "construct"
</script>
% endif %
% block content %% endblock content %
</body>
</html>
和孩子:
% extends "/templates/template.html" %
% set title = "Welcome" %
% block head %
% endblock head %
% block content %
% endblock content %
问题是,我想将变量“trying”传递给父级,有没有办法做到这一点?
提前致谢!
【问题讨论】:
【参考方案1】:Jinja2 Tips and Tricks 页面上的示例完美地解释了这一点,http://jinja.pocoo.org/docs/templates/#base-template。本质上,如果你有一个基本模板
**base.html**
<html>
<head>
<title> MegaCorp -% block title %% endblock %</title>
</head>
<body>
<div id="content">% block content %% endblock %</div>
</body>
</html>
和一个子模板
**child.html**
% extends "base.html" %
% block title % Home page % endblock %
% block content %
... stuff here
% endblock %
任何python函数调用render_template("child.html")都会返回html页面
**Rendered Page**
<html>
<head>
<title> MegaCorp - Home page </title>
</head>
<body>
<div id="content">
stuff here...
</div>
</body>
</html>
【讨论】:
这可能应该被标记为根据问题的框架是正确的答案。 这没有回答问题,即是否可以将变量从子级传递给父级。类似于% extends "base.html" is_trying=True %
,然后在父级中读取is_trying
。【参考方案2】:
我认为您希望在基本布局中突出显示活动菜单,您需要这样的东西
% extends 'base.html' %
% set active = "clients" %
然后使用可以在base.html中使用“active”
【讨论】:
【参考方案3】:您只需要在扩展模板之前声明该变量,这样扩展模板就可以访问变量trying
% set trying = True % <----------- declare variable
% extends "/templates/template.html" %
% set title = "Welcome" %
% block head %
% endblock head %
% block content %
% endblock content %
几年后,但希望它可以帮助后来者
【讨论】:
这正是我所需要的。试图为从基本模板派生的任何页面设置全局命名空间,这是使其工作的唯一方法。【参考方案4】:我不明白你的问题。当您将变量传递给上下文时(就像您尝试所做的那样),这些变量将在子级和父级中可用。 要将标题传递给父级,您必须使用继承,有时与 super 结合使用:http://jinja.pocoo.org/docs/templates/#super-blocks
另请参阅此问题:Overriding app engine template block inside an if
【讨论】:
是的,很抱歉,我已经找到问题所在了。答案很简单——不要。它给我带来了很多问题。 “答案很简单——不要”我通常不使用变量,而是将嵌套块添加到父块中,然后将其填充到子块中。 sscalvo 的答案虽然有效! (对于一些小众案例很有用)以上是关于有没有办法将变量传递给 Jinja2 父母?的主要内容,如果未能解决你的问题,请参考以下文章