2013-05-04 54 views
0

我需要在我的頁面上進行子導航。我從主導航所在的base.html繼承,但我不知道如何進行每頁不同的子導航。Django中的子導航

我想過製作一個模板標籤,我可以在每個模板文件中爲子導航指定項目,並且只有在指定任何子導航項目時才輸出子導航。別人怎麼做?

回答

1

爲什麼你不能有一個單獨的子導航塊並覆蓋子模板中的該塊?

base.html文件

<a href="">Calls</a> 
<a href="">Messages</a> 
{% block subnav %} 
{% endblock %} 

calls.html

{% extends "base.html" %} 
{% block subnav %} 
    <a href="">Outbound calls</a> 
    <a href="">Inbound calls</a> 
{% endblock %} 

messages.html

{% extends "base.html" %} 
{% block subnav %} 
    <a href="">Sent messages</a> 
    <a href="">Recieved messages</a> 
{% endblock %} 
+0

+1,這就是我建議。你可以像現在一樣使用你的視圖,而且它還有一個額外的好處,如果你用一個div來包圍你的塊,你可以很容易地包含異步更新(例如'

'。 – jro 2013-05-04 08:29:05

1

來實現這樣可以創建一個templatetag一個需要參數的簡單方法,例如頁面樹中當前頁面的唯一ID或者段落。

E.g.

@register.simple_tag 
def subnavigation_for_page(request, page_id, *args, **kwargs): 
    qs = Page.objects.filter(is_active=True) 
    current_page = qs.get(id=page_id) 
    sub_navigation = list() 
    for page in qs.filter(level__gt=current_page.level): 
     if page.level > current_page.level: 
      sub_navigation.append(page) 
    return sub_navigation 

您可以擴展該示例以將呈現的導航作爲html返回或使用'as'節點返回變量並在模板本身內定義html。

包可能會感興趣:

django-mptt