2011-12-24 7 views
10

senaryo olacaktır:bir üst html dosyasından bir jinja ithalat içine bir değişken geçirerek veya dahil

"sen geçmek istiyorum vb adı, adresi, gibi alanlarda bir dizi içeren bir değişken olarak adlandırılan kişi var "html kısmi parçasına - bu çözüm örnek

snippet.html

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

sayfam.html

için müşteriler için bir arama sonuçları olabilir

Bunu başarmanın en iyi yolu nedir? Dokümantasyonda, heryerde bağlamı anlatmaktan bahsediyor, ancak bu şablonlar işlenirken oldukça büyük bir nesne gibi görünüyor. kesinlikle her bir şablona belirli nesneleri iletmek daha mı kolaydır?

cevap

12

başka birine bir şablon eklemesini, kendi bağlamı bu erişen, böylece person değişken 'ın mypage.html bağlam geçirirseniz, bu gibi ithal şablondan erişmek mümkün olacak:

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

dahil dosyadaki makrolar hakkında – aWebDeveloper

+4

bu sinir bozucu kısmı daha sonra yapamaz ne olduğunu: aktarırken, örneğin bir ithal makro mevcut bağlamı sahip olmak için, bağlam ile kullanmak zorunda senin küçük konuşmak için "arama değişken" ismine agnostik olacak kadar genel jenerik içerir. Örneğin, bazı nesne listelerini sıralamak için genel bir yol oluşturuyorsam, genellikle bunları "nesneler" adı verilen bir kapsayıcıda bulundurmuyorum, "hayvanlar" gibi daha spesifik bir şey. – Dan

+0

@Dan Bunun için neden bunun için makro kullanmıyorsunuz? – Achshar

4

Bu, MatToufoutu'nun yanıtını tamamlar.

Çevre globals her zaman makrolarda kullanılabilir, ancak içerik değişkenleri değildir.

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