2016-09-26 1 views
0

J'ai plusieurs pages de produits sur mon site qui auront un index et une mise en page identiques, mais un chemin d'URL différent. Je souhaite réutiliser le modèle mais filtrer les résultats pour afficher uniquement les objets enfants de cette page d'index.Réutiliser le modèle d'index Wagtail pour plusieurs listes

Par exemple:

Actuellement

www.../carnival - index page that displays all child objects 
www.../carnival/rides-games - child page of carnival 
www.../carnival/etc... 

Je veux utiliser la même page d'index sur d'autres sections du site:

www.../catering - index page that displays all child objects 
www.../catering/fun-food - child page of catering 
www.../catering/etc... 

Mais, quand je l'utilise même page d'index et de visiter ma page carnival, je vois tous mes objets enfants de restauration ainsi.

Ci-dessous est mon code - s'il vous plaît aidez-moi; Je sais qu'il doit y avoir une façon DRY de le faire. Je vous remercie.

standard_index_page.html

{% block content %} 
... 
{% standard_index_listing %} 
... 
{% endblock %} 

standard_index_listing.html

{% if pages %} 
    {% for pages in pages %} 
    <div class="col-xs-6 col-sm-4 col-md-3 mt20 hover-float"> 
     <div class="team-two"> 
     {% if pages.feed_image %} 
      {% image pages.feed_image original as img %} 
      <div class="team-one" data-animation="zoomIn" data-animation-delay="100" style="background: url('{{ img.url }}') no-repeat top center; background-size: cover"></div> 
     {% endif %} 
     <h5>{{ pages.title }}</h5> 
     <small><a href="{% pageurl pages %}" class="color-pasific">Learn More </a></small> 
     </div> 
    </div> 
    {% endfor %} 
{% endif %} 

home_tags.py

@register.inclusion_tag(
    'home/tags/standard_index_listing.html', 
    takes_context=True 
) 
def standard_index_listing(context): 
    pages = StandardPage.objects.live() 
    return { 
     'pages': pages.select_related('feed_image'), 
     'request': context['request'], 
    } 

Répondre

1

Dans le dictionnaire context passé à la balise standard_index_listing, vous avez la page en cours disponible en tant que 'page'. Vous pouvez l'utiliser pour filtrer l'queryset (voir http://docs.wagtail.io/en/v1.6.2/reference/pages/queryset_reference.html#module-wagtail.wagtailcore.query):

def standard_index_listing(context): 
    pages = StandardPage.objects.live().child_of(context['page']) 
    return { 
     'pages': pages.select_related('feed_image'), 
     'request': context['request'], 
    } 
+0

Vous pouvez également faire 'pages = contexte [ 'page'] get_children() vivent()'... – 404