从父HTML文件向Jinja导入或包含传递变量

17 投票
2 回答
31416 浏览
提问于 2025-04-17 08:57

这个场景是这样的:

“你有一个叫做 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)

撰写回答