2016-07-21 88 views
1

我想知道是否有辦法將局部視圖擴展到已經擴展了base.html的視圖中。擴展一個已經在Django中擴展的模板

這裏是什麼,我試圖做一個例子:

我-template.html

{% extends 'base.html '%} 

<div class="row"> 
    <div class="col-xs-12"> 
    <ul class="nav nav-tabs"> 
     <li role="presentation" class="active"><a href="#">Tab1</a></li> 
     <li role="presentation"><a href="#">Tab2</a></li> 
    </ul> 
    </div> 
</div> 

<div> 
{% block tab_content %} 
{% endblock %} 
</div> 

partial1.html

{% extends 'my-template.html' %} 

{% block tab_content %} 
<h1>I'm partial 1</h1> 
{% endblock %} 

的我 - template.html視圖有一個像這樣構造的url:

url(r'^my-template/(?P<id>[0-9]+)/$', views.my_template_view, name='my-template') 

此外,上下文詞典被傳遞給my_template_view,爲網址提供id。

我想爲用戶點擊一個標籤,其相應的部分用一個URL來呈現,像這樣:

url(r'^my-template/(?P<id>[0-9]+)/tab1/$', views.tab1_view, name='tab1-view') 

,但現在我的/我的 - 得到一個NoReverseMatch template/97/tab1 /我假設我的tab1_view不能訪問與my_template_view相同的上下文,因此無法獲得構建我網址反向的id。

In template /partial1.html, error at line 0 
Reverse for 'tab1_view' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['/my-template/(?P<id>[0-9]+)/tab1/$'] 

那麼,有沒有適合我的方式,在最起碼,沿上下文或ID傳遞所以這個工作,還是我在完全錯誤的方式去這件事?

+0

您沒有顯示回溯,或導致錯誤的視圖/模板代碼。 – Alasdair

回答

2

解決此問題的典型方法是使用include模板標記,而不是使用新模板進行擴展。

Here is the Django doc describing this.

你甚至可以使用一個變量定義將根據您的視圖邏輯包括動態模板名稱。

多一點澄清一下:

您也可以在URL路徑指向同一個視圖,並在「標籤」任選傳過來的第二個參數是這樣:

url(r'^my-template/(?P<id>[0-9]+)/(?P<tab_name>\w+)/$', views.my_template_view, name='my-template') 
url(r'^my-template/(?P<id>[0-9]+)/$', views.my_template_view, name='my-template') 

和你觀點看起來是這樣的:

def my_template_view(request, id, tab_name=None): 
    if not tab_name: 
     tab_name = "tab1" 
    if tab_name == "tab1": 
     partial = "tab1.django.html" 
    elif tab_name == "tab2": 
     partial = "tab2.django.html" 
    return render("my-template.html", { 'partial': partial }) 

並在您的模板中,您將有:

{% include partial %} 

由於包含的模板將具有相同的上下文,因此您將有權訪問原始上下文中可用的任何變量。

+0

沒問題,所以我試着這樣做,但我不確定如何根據點擊哪個標籤將不同的視圖包含到my-template.html中?你有這個邏輯的開始? – moku

+0

:)檢查我的最新編輯。你需要多一點嗎? – cardonator

+0

好吧,我覺得我幾乎在那裏,但my_template_view如何獲得點擊tab_name? – moku