Передача переменной в импорт jinja или включение из родительского html файла

Сценарий будет выглядеть следующим образом:

"у вас есть переменная, называемая человеком, которая содержит ряд полей, таких как имя, адрес и т.д., которые вы хотите передать частичной части 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>

Каков наилучший способ достичь этого. В документации он рассказывает о передаче контекста повсюду, но это кажется мне довольно крупным объектом при визуализации шаблонов. конечно, проще передать конкретные объекты в каждый шаблон?

Ответ 1

Когда вы включаете шаблон в другой, он получает доступ к своему контексту, поэтому, если вы передадите свой контекст 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)

Ответ 2

Это дополняет ответ MatToufoutu.

Глобальные глобальные переменные всегда доступны в макросах, но переменные контекста - нет. Чтобы контекст был доступен в импортированном макросе, вы должны использовать с контекстом при импорте, например:

{% from "your_macros.html" import your_macro with context %}