2010-12-07 68 views
7

我正在使用Django CMS 2.1.0.beta3並遇到問題。我需要訪問變量中的所有頁面,以便可以遍歷它們並使用for循環創建導航菜單。 django cms提供的show_menu功能不適用於我正在做的事情。如何從每個頁面訪問django-cms中的所有頁面對象?

我需要的所有頁面的查詢集,所以我可以做類似下面的內容:

{% for page in cms_pages %} 
    {{ page.title }} 
{% endfor %}  

有誰知道我怎樣才能獲得對所有喜歡上ALL網頁公佈的頁面對象的訪問?

回答

10

我結束了創建在Django一個templatetag所有提供瞭解決這個問題的cms頁面:

app/template_tags/navigation_tags.py:

from django import template 
from cms.models.pagemodel import Page 

register = template.Library() 

def cms_navigation(): 
    cms_pages = Page.objects.filter(in_navigation=True, published=True) 
    return {'cms_pages': cms_pages} 

register.inclusion_tag('main-navigation.html')(cms_navigation) 

然後在模板調用模板標籤如下:

{% load navigation_tags %} {% cms_navigation %} 

這就要求你創建了一個主navigation.html文件。在這裏,來自該模板的HTML將被注入到標籤所在的模板中,main-navigation.html將有權訪問在自定義標籤函數中傳遞給它的任何內容:

templates/main-navigation.html :

<ul id="navigation"> 
    {% for page in cms_pages %} 
     {{ page.get_title }} 
    {% endfor %}  
</ul> 

我希望這可以幫助某人更好地理解模板標籤。我發現文檔在這個問題上有點混亂。

1

您可以使用Page模型來獲取所有發佈的頁面。

Page.objects.published() 

您可以在您的意見或插件

使用

問候 米羅 migaat.blogspot.com

+1

我意識到您可以這樣做,但是如何讓所有頁面模板都可用? – thomallen 2010-12-07 16:54:10

1

您需要在您想要的頁面添加此。

{{ request.current_page }} 

這對我有效。 您可能需要在您的代碼中包含{% load staticfiles %}某處