Jay Jay - 2 months ago 17
Python Question

passing a variable into a jinja import or include from a parent html file

The scenario would be:

"you have a variable called person which contains a number of fields like name, address, etc which you want to pass to a partial piece of html" - this solution could be results from a search for customers for example

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>


What is the best way to achieve this. In the documentation it talks about passing context around everywhere, but that seems to me to be a rather large object when rendering templates. surely it is easier to pass specific objects into each template?

Answer

When you include a template into another one, it gains access to its context, so if you pass your person variable to mypage.html's context, you'll be able to access it from your imported template like this:

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)