从父HTML文件向Jinja导入或包含传递变量
这个场景是这样的:
“你有一个叫做 person 的变量,它里面包含了一些字段,比如姓名、地址等等,你想把这些信息传递给一部分 HTML。” - 比如说,这个解决方案可能是从客户搜索中得到的结果。
snippet.html
<div id="item">
<ul>
<li>
<span>{{name}}</span>
<span>{{address}}</span>
<li>
</ul>
</div>
mypage.html
<div id="result">
{% include "snippet.html" passing {{person}} %}
</div>
那么,最好的方法是什么呢?在文档中提到要到处传递上下文,但我觉得在渲染模板的时候,这样的对象会比较大。难道把具体的对象传递到每个模板里不是更简单吗?
2 个回答
7
这段内容是对mdeous的回答的补充。
环境全局变量在宏中总是可以使用,但上下文变量就不一定了。要在导入的宏中使用上下文,你需要在导入时使用with context,例如:
{% from "your_macros.html" import your_macro with context %}
20
当你把一个模板放到另一个模板里时,新的模板就能使用原来模板里的内容。比如,如果你把一个叫做 person
的变量传给了 mypage.html
,那么在你引入的模板中就可以这样访问它:
snippet.html:
<div id="item">
<ul>
<li>
<span>{{ person.name }}</span>
<span>{{ person.address }}</span>
</li>
</ul>
</div>
mypage.html:
<div id="result">
{% include 'snippet.html' %}
</div>
view.py:
def view(person_id):
person = Person.get(person_id) # or whatever source you get your data from
return render_template('mypage.html', person=person)