передача переменной в импорт jinja или включение из родительского html-файла - PullRequest
11 голосов
/ 24 декабря 2011

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

«у вас есть переменная с именем 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 ]

13 голосов
/ 24 декабря 2011

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

Это дополняет ответ Маттуфуту.

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

{% from "your_macros.html" import your_macro with context %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...