2010-12-07 9 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

私はすべてを提供ジャンゴで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> 

これは、誰かがtemplatetagsをよりよく理解するのに役立ちます。私は、この問題について少し混乱しているドキュメントを見つけました。あなたが使用する必要があるドキュメントによると

1

ページモデルを使用すると、すべての公開ページを取得できます。

Page.objects.published() 

あなたは

よろしく ミロあなたの意見やプラグイン

でこれを使用することができます migaat.blogspot.com

+1

私はこれを行うことができることを認識していますが、どのようにすべてのページテンプレートで利用できるようにしますか? – thomallen

1

あなたがページを配置したい場所にこれを追加する必要があります。

{{ request.current_page }} 

これは私に役立ちました。 {% load staticfiles %}をコードのどこかに入れておく必要があるかもしれません。

関連する問題