2011-12-24 11 views
10

Scenariusz byłoby:przechodzącą zmienną do importu jinja czy to z pliku rodzic html

„masz zmienną o nazwie osobę, która zawiera szereg dziedzin, takich jak nazwisko, adres, itp, które chcesz przekazać do częściowego kawałka html”- to rozwiązanie może być wynikiem poszukiwania klientów na przykład

snippet.html

<div id="item"> 
    <ul> 
    <li> 
     <span>{{name}}</span> 
     <span>{{address}}</span> 
    <li> 
    </ul> 
</div> 

mojastrona.html

<div id="result"> 
    {% include "snippet.html" passing {{person}} %} 
</div> 

Jaki jest najlepszy sposób, aby to osiągnąć. W dokumentacji mówi o przechodzącym kontekście wszędzie, ale wydaje mi się, że jest to dość duży obiekt podczas renderowania szablonów. na pewno łatwiej jest przekazać określone obiekty do każdego szablonu?

Odpowiedz

12

Po dołączeniu szablon na inny, zyskuje dostęp do jego kontekstu, więc jeśli przejdą person zmienna mypage.html „s swój kontekst, będzie można uzyskać do niego dostęp z importowanym szablonie tak:

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) 
+1

co makr w dołączonego pliku – aWebDeveloper

+4

frustrujące część jest to, że nie można następnie dokonać twoje małe zawierają rodzaj ogólny, by być agnostycznym dla nazwy "wywołującej zmiennej", że tak powiem. Na przykład, jeśli buduję ogólny sposób na paginację jakiejś listy obiektów, zwykle nie mam ich w pojemniku nazywanym "obiektami", jest to coś bardziej specyficznego jak "zwierzęta". – Dan

+0

@ Dan Dlaczego zamiast tego nie używać makr? – Achshar

4

To uzupełnia odpowiedź MatToufoutu.

Środowiskowe globale są zawsze dostępne w makrach, ale zmienne kontekstowe nie są. Aby mieć kontekst dostępne w importowanym makro, trzeba użyć z kontekstu podczas importowania, np:

{% from "your_macros.html" import your_macro with context %} 
Powiązane problemy