如何从每个页面访问django-cms中的所有页面对象?

时间:2010-12-07 01:56:04

标签: python django django-cms

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

我需要一个包含所有页面的查询集,所以我可以做类似以下的事情:

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

是否有人知道如何访问所有页面上所有已发布的网页对象?

4 个答案:

答案 0 :(得分:11)

我最终通过在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>

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

答案 1 :(得分:2)

根据您应该使用的文档:

Page.objects.public()

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

答案 2 :(得分:1)

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

Page.objects.published()

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

此致 米罗 migaat.blogspot.com

答案 3 :(得分:1)

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

{{ request.current_page }}

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