Как получить доступ ко всем объектам страницы в django-cms с каждой страницы?

Я использую Django CMS 2.1.0.beta3 и я сталкиваюсь с проблемой. Мне нужен доступ ко всем страницам переменной, чтобы я мог перебирать их и создавать меню навигации с помощью цикла for. Функциональность show_menu, предоставляемая django cms, не будет работать для того, что я делаю.

Мне нужен queryset со всеми страницами, чтобы я мог сделать что-то подобное следующему:

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

кто-нибудь знает как я могу получить доступ ко всем опубликованным объекты страницы вот так на все страницы?

4 ответов


я решил эту проблему, создав templatetag в django, который обслуживает все страницы 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 %}

Это требует, чтобы у вас была основная навигация.создал HTML-файл. Вот тогда HTML из этого шаблона будет введен в шаблон, где бы тег ни был, а main-navigation.HTML будет иметь доступ к все, что было передано ему в пользовательской функции тега:

шаблоны/главная-навигации.HTML-код:

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

Я надеюсь, это поможет кому-то лучше понять templatetags. Я нашел документацию немного запутанной по этому вопросу.


в соответствии с документом вы должны использовать:

Page.objects.public()

источник: https://github.com/divio/django-cms/blob/support/2.4.x/cms/models/managers.py#L31


вы можете использовать модель для всех опубликованных страниц.

Page.objects.published()

вы можете использовать это в ваших представлениях или плагины

С уважением Миро migaat.blogspot.com


вам нужно добавить это, где вы хотите страницу.

{{ request.current_page }}

это работает для меня. Возможно, Вам потребуется включить {% load staticfiles %} где-то в коде