2012-06-08 24 views
5

'da bulunan etiketler Django şablon sisteminin çok garip davranışlarına rastladım. Hiçbir bitirme şartı olmadığı için, TabiiKoşullu Django

{% include "test.html" %} 

, böyle şablon hale şansı yok: Ben yinelemeli kendisini içeren bir şablon dosyası, yani test.html var. Tamam, şu deneyelim: test_false şablon geçirilen ve False eşit bir değişkendir

{% if test_false %}{% include "test.html" %}{% endif %}, 

.

biri sadece bir şey içermez olacak beklediğini, ancak yapar:

RuntimeError at /test/ 
maximum recursion depth exceeded while calling a Python object 

ben alamadım. Etiketi geçerli bağlamdan argümanlar alabilir, bu yüzden sayfanın başka bir bölümünden önce çalıştırıldığından şüpheliyim. O zaman neden durum etiketi yok sayılıyor?

cevap

6

Django, derleme sırasında sabitler tarafından verilen şablonları içeren bir optimizasyona sahiptir.

Seti değişkene şablonun ismi ve bu şekilde onu şunlardır:

{% include test_template %} 

Django o optimizasyon var ve kod çalışması gerekir kullanmak mümkün olmayacaktır.

{% include "test.html" %} 

Ama doğrusu şablon yolunu koymak olmazdı: şöyle -

-1

gibi Thomasz yolu da dahil olmak üzere şablonda sabit dize olarak tanımlanır eğer Django yalnızca bu optimizasyon yapabilir diyor Python kodundan bağlam.

{% with "test.html" as path %} 
    {% include path %} 
{% endwith %} 
: - Yani burada

aynı sonucu elde etme biraz daha müstakil bir yoldur bir with dahil sarmak