9

我正在使用 Django CMS 2.1.0.beta3 并且遇到问题。我需要访问变量中的所有页面,以便我可以遍历它们并使用 for 循环创建我的导航菜单。django cms 提供的 show_menu 功能不适用于我正在做的事情。

我需要一个包含所有页面的查询集,因此我可以执行类似于以下的操作:

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

有谁知道我如何才能访问所有页面上的所有已发布页面对象

4

4 回答 4

12

我最终通过在 django 中创建一个提供所有 cms 页面的模板标签来解决这个问题:

应用程序/模板标签/导航标签.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 将可以访问在自定义标签函数中传递给它的任何内容:

模板/主导航.html:

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

我希望这可以帮助人们更好地理解模板标签。我发现文档在这个主题上有点混乱。

于 2010-12-10T17:44:45.303 回答
2

根据文档,您应该使用:

Page.objects.public()

来源:https ://github.com/divio/django-cms/blob/support/2.4.x/cms/models/managers.py#L31

于 2014-02-18T09:02:41.173 回答
1

您可以使用 Page 模型来获取所有已发布的页面。

Page.objects.published()

您可以在视图或插件中使用它

问候 Miro migaat.blogspot.com

于 2010-12-07T07:18:55.697 回答
1

您需要将其添加到您想要页面的位置。

{{ request.current_page }}

这对我有用。您可能需要{% load staticfiles %}在代码中包含某处

于 2016-06-16T07:05:21.767 回答