【问题标题】:How do I access all page objects in django-cms from every page?如何从每个页面访问 django-cms 中的所有页面对象?
【发布时间】:2010-12-07 01:56:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

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

    这需要您创建一个 main-navigation.html 文件。在这里,来自该模板的 HTML 将被注入到标签所在的模板中,并且 main-navigation.html 将可以访问在自定义标签函数中传递给它的任何内容:

    模板/main-navigation.html:

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

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

    【讨论】:

    • 八年后,文档仍然主要是示例。谢谢你的澄清!
    • @random6174 太棒了,我很高兴这仍然有用!
    【解决方案2】:

    根据您应该使用的文档:

    Page.objects.public()
    

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

    【讨论】:

    • 链接已损坏。
    【解决方案3】:

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

    Page.objects.published()
    

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

    问候 米罗 migaat.blogspot.com

    【讨论】:

    • 我知道你可以做到这一点,但我如何让所有页面模板都可以使用它?
    【解决方案4】:

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

    {{ request.current_page }}
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多