2009-11-12 81 views

回答

4

使用block.super工作正常延伸時的模板,但沒有得到很好的包括一個時,即:

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

說你想在中間的模板你的頁面,你也希望它在頁面末尾的塊中添加一些JavaScript:在包含的模板中調用block.super將崩潰。

參考Django問題#7324#12008,#13399related update to the documentation。參看include tag注:

的包括標籤應被視爲「呈現此子模板,幷包括HTML」,而不是「分析此子模板,包括它的內容就好像它是母公司的一部分」的實現。這意味着包含模板之間不存在共享狀態 - 每個包含都是完全獨立的呈現過程。

在包含塊之前對塊進行評估。這意味着包含來自另一個塊的模板將包含已經評估和渲染的塊 - 而不是可以被例如擴展模板覆蓋的塊。

在這種情況下,我建議使用django-sekizai,至極允許你做這樣的事情:

{% 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" %} 

django-sekizai README

我開始這個項目的主要原因是缺乏在django和django-cms中的良好媒體(css/js)框架。是的,django中的表單中使用了Media類,但實際上並不適用。通常前端的人想要決定包含css和javascript文件,他們不希望編輯Python文件來改變,我也不希望他們改變我的Python文件。因此,您需要允許您編輯現在位置之前或之後的模板內容。另外我想重複刪除。結果我寫了django-sekizai,這確實如此。它與塊相似,只是擴展它們而不是繼承它們。

相關問題