Üzerine yazmak yerine bir {% block%} ekleyebilir miyiz?


116

Core.html dosyamda javascript etiketli bir bloğum var. İçindeki her şeyin üzerine yazmadan bu bloğa daha fazla satır ekleyebilirsem harika olur.

Yanıtlar:



9

Kullanımı block.super, bir şablonu genişletirken iyi çalışır, ancak bir şablon dahil ederken iyi değildir, yani:

{% extends "base.html" %} vs. {% include "partial.html" %}

Sayfanızın ortasına bir şablon eklemek istediğinizi ve ayrıca sayfanın sonundaki bir bloğa bir miktar javascript eklemesini istediğinizi varsayalım: block.superdahil edilen şablondaki arama çökecektir.

Krş Django , # 7324 , # 12008 , # 13399 ve ilgili dokümantasyon güncellemesini yayınlar . Krş etiket notu dahil et:

İnclude etiketi, "bu alt şablonu ayrıştır ve içeriğini üst öğenin bir parçasıymış gibi dahil et" olarak değil, "bu alt şablonu oluştur ve HTML'yi içer" uygulamasının bir uygulaması olarak düşünülmelidir. Bu, dahil edilen şablonlar arasında paylaşılan bir durumun olmadığı anlamına gelir - her bir dahil etme tamamen bağımsız bir oluşturma sürecidir.

Bloklar dahil edilmeden önce değerlendirilir. Bu, başka bir şablondan gelen blokları içeren bir şablonun önceden değerlendirilmiş ve oluşturulmuş blokları içereceği anlamına gelir - örneğin bir genişleyen şablon tarafından geçersiz kılınabilen bloklar değil.

Bu durumda django-sekizai kullanmanızı tavsiye ederim , bu da size aşağıdaki gibi şeyler yapmanıza izin verir:

{% load sekizai_tags %}

                                  <p>Some content</p>
<p>Some content</p>             | {% addtoblock "js" %}
                                |   <script type="text/javascript">
{% include "partial.html" %} ->      alert("Hello django-sekizai");
                                |   </script>
<p>Some more content</p>         {% endaddtoblock %}


{% render_block "js" %}

Gönderen Django-sekizai README :

Bu projeye başlamamın ana nedeni, django ve django-cms'de iyi bir medya (css / js) çerçevesinin olmamasıydı. Evet, django'da formlarda kullanılan Media sınıfı var, ama bu o kadar da iyi çalışmıyor. Genellikle ön uçtaki kişiler css ve javascript dosyalarının eklenmesine karar vermek isterler ve Python dosyalarını düzenlemek için Python dosyalarımı değiştirmelerini istemiyorlar. Bu nedenle, şu anda bulunduğunuz noktadan önceki veya sonraki şablonların içeriğini düzenlemenize izin verme ihtiyacı vardı. Ayrıca kopyaların da kaldırılmasını istedim. Sonuç olarak django-sekizai yazdım, ki bu tam olarak bunu yapar. Bloklara benzer, sadece onları miras almak yerine genişletiyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.