Question

J'utilise Django CMS 2.1.0.beta3 et je rencontrais un problème. Je dois avoir accès à toutes les pages dans une variable afin que je puisse en boucle à travers eux et créer mon menu de navigation à l'aide d'une boucle. La fonctionnalité de show_menu fourni avec django cm ne fonctionnera pas pour ce que je fais.

je besoin d'un queryset avec toutes les pages afin que je puisse faire quelque chose de semblable à ce qui suit:

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

Quelqu'un sait comment je peux accéder à tous les objets de page publiés comme ça sur ALL pages?

Était-ce utile?

La solution

J'ai fini par résoudre ce problème en créant un templatetag dans django qui sert toutes les pages 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)

Ensuite, dans les modèles que vous appelez la balise de modèle comme suit:

{% load navigation_tags %} {% cms_navigation %}

Il faut donc que vous avez un fichier principal navigation.html créé. Voici donc le code HTML à partir de ce modèle sera injecté dans le modèle où la balise est et le principal navigation.html aura accès à tout ce qui a été passé à dans la fonction de balise personnalisée:

Modèles / main-navigation.html:

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

J'espère que cela aide quelqu'un à mieux comprendre templatetags. J'ai trouvé la documentation un peu déroutant à ce sujet.

Autres conseils

Selon le document, vous devez utiliser:

Page.objects.public()

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

Vous pouvez utiliser le modèle page pour obtenir toutes les pages publiées.

Page.objects.published()

Vous pouvez utiliser dans vos vues ou plugins

Cordialement Miro migaat.blogspot.com

Vous devez ajouter ce où vous voulez la page.

{{ request.current_page }}

Cela a fonctionné pour moi. Vous devrez peut-être avoir inclus quelque part de {% load staticfiles %} dans votre code

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top