2009-04-05 7 views
13

Sadece Python başlıyorum bu basit bir soru^_^aşağıdaki içeriğe sahip bir HTML dosyası varDjango Şablon Yeni Değişken Deklarasyonu

gerçekten eğer öyleyse beni Önsöz İyi çalışıyor ama bu sayfada bir değişken bildirmek istiyorum. Bu örnek için diyelim ki, RowNumber'i mevcut olan RowNumber'i tükettiğimiz her bir d görüntü için artacak.

yaptığım çalıştı:

{{ RowNumber = 0}} 
{{ RowNumber ++ }} 

Ama beni RowNumber ilan etmeye izin vermiyor.

+0

Başlık 'Django Template' yerine olmalıdır. – muhuk

cevap

20

for döngüsünde documentation'a bakın.

Geçerli yineleme indeksini tutan forloop.counter adlı bir değişken otomatik olarak oluşturur.

Değişkenleri nasıl bildireceğinizle ilgili daha fazla soruya kadar, Django ile bunu yapmanın bir yolu yoktur ve eksik bir özellik değil, bir özellik olarak kabul edilir. Eğer gerçekten bunu yapmak istediyseniz, custom tags ile mümkündür, ancak çoğunlukla takip etmek istediğiniz felsefe, bunu yapmak istediğiniz çoğu şeyin bunun yapılmasını gerektirmesidir ve şablon çok basit bir şekilde ayrılmalıdır. mantık. Örneğin toplamı toplama örneğiniz için add filtresini kullanabilirsiniz. Benzer şekilde, etiketlerde olduğu gibi create your own filters'u da yapabilirsiniz.

+1

Teşekkürler, ya yeni bir değişkene ihtiyacım olsaydı ne olurdu? Örneğin, belirli parametrelerin toplamlarını ekleme ... – TimLeung

+0

Sonra özel bir etiket veya filtre kullanmanız gerekir - Django şablonlama dili yeni değişkenleri bildirmenize izin vermez. – mipadi

+0

Django'nun şablon dili PHP'nin, ASP'nin, JSP'nin "şablon içinde" kodlama stilini önlemek için tasarlandı. Bu nedenle, Paolo ve mipadi'nin söylediği gibi, bu tür bir beyan, kasıtlı olarak eksiktir. Şablonların ruhu, ekleme işlevi gibi herhangi bir işleme mantığının görünüm fonksiyonunda yapılması gerektiğidir. –

7

Django şablonunda herhangi bir değişken ayarlamak isterseniz, this small template tag I've written'u kullanabilirsiniz.

{% for outer_obj in outer_list %} 
    {% for inner_obj in inner_list %} 
     {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %} 
    {% endfor %} 
{% endfor %} 

Templatetag: şablonunda

+0

Bunu denedim ve aldım: TemplateSyntaxError: 'set_var' geçerli bir etiket kütüphanesi değil: Template library set_var bulunamadı, google.appengine._internal.django.templatetags.set_var. – slashdottir

+0

, Django uygulamanızı "INSTALLED_APPS" içine ekleyebildiğiniz gibi görünüyor. –

2

@register.simple_tag 
def increment_counter(outer, inner, outer_loop_length): 
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1) 

Sonuç: 0 1 2 3 ...