Как получить доступ ко всем объектам страницы в 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 %}
где-то в коде