将变量传递给jinja导入或从父html文件包含

Jay*_*Jay 11 python templates jinja2 flask

场景将是:

"你有一个名为person的变量,它包含许多字段,如名称,地址等,你想传递给部分html" - 这个解决方案可能是搜索客户的结果,例如

snippet.html

<div id="item">
  <ul>
     <li>
         <span>{{name}}</span>
         <span>{{address}}</span>
     <li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

的mypage.html

<div id="result">
   {% include "snippet.html" passing {{person}} %}
</div>
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?在文档中,它讨论了在任何地方传递上下文,但在我渲染模板时,这似乎是一个相当大的对象.当然,将特定对象传递到每个模板更容易吗?

mde*_*ous 13

当您将模板包含到另一个模板中时,它可以访问其上下文,因此如果您将person变量传递给mypage.html上下文,您将能够从导入的模板中访问它,如下所示:

snippet.html:

<div id="item">
    <ul>
        <li>
            <span>{{ person.name }}</span>
            <span>{{ person.address }}</span>
        </li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

mypage.html:

<div id="result">
    {% include 'snippet.html' %}
</div>
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • 令人沮丧的是,你不能让你的小包含通用到足以与"调用变量"名称无关,可以这么说.举例来说,如果我建立一个通用的方式进行分页对象的一些名单,我通常没有他们所谓的"物"的容器,它更具体,如"动物"的东西. (4认同)

kak*_*aka 6

这补充了MatToufoutu的答案.

环境全局变量始终在宏中可用,但上下文变量不是.要在导入的宏中使用上下文,您必须在导入时使用上下文,例如:

{% from "your_macros.html" import your_macro with context %}
Run Code Online (Sandbox Code Playgroud)