2016-03-24 22 views
3

Ben şablon böyle base.html:Django 'ile' ve 'blok' etiketi iç içe

<p>{% block a %}{% endblock %}</p> 
<p>{% block b %}{% endblock %}</p> 

Ve şablon index.html:

{% extends "base.html" %} 

{% with description="foo" %} 
    {% block a %}{{ description }}{% endblock %} 
    {% block b %}{{ description }}{% endblock %} 
{% endwith %} 

Ama sonuç olur :

( )
<p>foo</p> 
<p>foo</p> 

Bunun için bir geçici çözüm var mı?

cevap

4

Kalıtsal olmayan şablonlarda django, blocks kodunun içine bakar. Bu, bunun dışındaki with bloğunuzun varlığını algılamayacağı anlamına gelir. böylece tek seçenek tek için with kullanarak değmez istenmesine karşın, her bloğun içine

{% block a %}  
    {% with description="foo" %} 
     {{ description }} 
    {% endwith %}  
{% endblock %} 

ile dahil etmektir, diğer tek seçenek bağlamında

2

GÜNCELLEME içinden description geçmektir: Özel durumum için beklediğim gibi çalışmıyor. Yorumlara bakınız.

Sayse yanıtını okuyup bloklar nasıl çalıştığını daha iyi anladıktan sonra, bu çözüm ile geldim:

base.html:

{% block wrapping_block %} 
    {% block a %} 
    {% endblock %} 

    {% block b %} 
    {% endblock %} 
{% endblock %} 

index.html:

{% extends "base.html" %} 

{% block wrapping_block %} 
    {% with description='foo' %} 
     {% block a %} 
      {{ description }} 
     {% endblock %} 

     {% block b %} 
      {{ description }} 
     {% endblock %} 
    {% endwith %} 
{% endblock %} 
+0

Çok ilginç yaklaşım, şaşırmış çalışır, tahmin ediyorum çünkü 'index.html' den miras kalan şeyler için kullanılacak bir blok tanımlıyorsunuz. Hala 'description' ifadesinin ne işe yaradığını merak ediyorum ama işe yarayan bir şey bulduğuna sevindim! – Sayse

+0

Buradaki sorun, 'wrapping_block' içindeki ve 'a' ve 'b' dışındaki herhangi bir şeyin alt şablonlarda çıkarılmasıdır. Şimdi anladım ... ooops! – dablak

+0

Meta etiketleri ve başlık ve açıklama gibi Açık Grafik etiketleri için aynı değerleri kullanmaya çalışıyorum. Bazı sayfalarda, bu şablonda tanımlanır ve birkaç kelime uzunluğundadır. Tutarlı tutmak için bir değişken kullanmak istedim. Sanırım herşeyi tekrarlamak zorundayım. – dablak