2012-11-09 45 views
2

主要問題是如何以編程方式選擇要將某些內容放入的塊。以下是在不同的項目中工作,但在新項目中不起作用因爲某些原因。我在同一臺機器上爲兩個項目使用相同(默認)模板上下文處理器。在Django模板{%block%}標記中使用變量

我有一個是這樣的

... 
{% block Title %}<h1>Whoo</h1>{% endblock %} 

{% block Content %}<p>Hi there</p>{% endblock %} 
... 

而且這樣

{% extends "base.html" %} 
... 
{% block myblock.name %} <p> {{ myblock.content }} </p> {% endblock %} 

<p> {{ myblock.name }} </br> {{ myblock.content }} </p> 
... 

延伸模板和渲染這樣

myblock = { 'name': 'Title', 'content': 'stuff' } 
return render_to_response('extended.html', {'myblock': myblock}, context_instance=RequestContext(request)) 

我希望得到一個基本模板,並獲得第一個項目:

... 
<p> stuff <p> 
<p>Hi there</p> 
<p> Title </br> stuff </p> 
... 

但在第二個項目,我得到

... 
<h1>Whoo</h1> 
<p>Hi there</p> 
<p> Title </br> stuff </p> 
... 

所以在第二個項目中,myblock字典傳遞和模板處理,但似乎在{%塊myblock.name的myblock.name %}被解釋爲文字而不是變量。關於如何強制Django評估{%block%}標記內的變量的任何想法?

+0

適用於我,就像你的第一個例子。你確定這兩個項目的代碼是一樣的嗎? – j0ker

+0

檢查檢查並重新檢查:( – kalhartt

回答

1

您應該再看看有關template inheritance的文檔。

...塊標記定義[...]塊是子模板可以填寫 ,所有的塊標記,它只是告訴孩子 模板可以覆蓋模板的這些部分的模板引擎。

但是,當您試圖執行操作時,您不直接在視圖中爲塊分配變量。

{% block myblock.name %}也看起來很奇怪。

要接收你期待我想說的模板,而應該像這樣

{% extends "base.html" %} 
{% block Title %}<p>{{ myblock.content }}</p>{% endblock %} 

假設你使用的是最近的Django的版本中,你甚至可以使用render快捷簡化事情的結果在你看來:

​​

,這將導致這樣的一個模板:

{% extends "base.html" %} 
{% block Title %}<p>{{ content }}</p>{% endblock %} 
+0

我想避免硬編碼我的內容將被放入的塊,以便如果我有五個不同的塊,我可以選擇哪個塊用於查看函數內的什麼內容 – kalhartt

+1

然後, d可能轉向模板標籤... – arie