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

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

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

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

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

Ответы [ 4 ]

11 голосов
/ 10 декабря 2010

Я решил эту проблему, создав тег-шаблон в django, который обслуживает все страницы cms:

Приложение / 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 %}

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

шаблоны / основной navigation.html:

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

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

2 голосов
/ 18 февраля 2014

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

Page.objects.public()

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

1 голос
/ 16 июня 2016

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

{{ request.current_page }}

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

1 голос
/ 07 декабря 2010

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

Page.objects.published()

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

С уважением Miro migaat.blogspot.com

...