2017-11-17 4 views
2

Derzeit arbeite ich an einem E-Commerce-Projekt (mit Django-Oscar), ich habe ein Problem bezüglich der Produkte in der Korbvorlage angezeigt.Django Templates {% regroup%}: Behandeln Sie den Fall, wenn der Grouper Wert None ist

Ich benutze das {% regroup %} Tag, weil ich mehrere Arten von Produkten habe: Standalone, Eltern oder Kinder. Jede Basket-Zeile entspricht einem Produkt. Wenn mehrere von ihnen Kinder sind, die dasselbe Elternprodukt teilen, möchte ich, dass sie unter ihrem gemeinsamen Elternteil gruppiert werden. Ich möchte jedoch, dass eigenständige Produkte eigenständig sind.

Mein queryset ist folgende:

in_stock_lines = request.basket \ 
    .all_lines() \ 
    .order_by('product__parent', 'date_created') \ 
    .filter(attached_to=None, product__product_class__name='Produit standard', is_customized=False) 

In basket.html:

{% regroup in_stock_lines by product.parent as parent_list %} 
    {% for parent in parent_list %} 
     {% if parent.grouper %} 
      {% include "basket/partials/_basket_non_customized_product.html" %} 
     {% else %} 
      {% include "basket/partials/_basket_non_customized_standalone_product.html" %} 
     {% endif %} 
    {% endfor %} 

Die Sache ist, dass ich will nicht die Neugruppierung im {% else %} Teil zu handeln, weil sie eigenständige Produkte sind und sollen nicht neu gruppiert werden. Aber wie ihre product.parent, d. H. Der Grouper ist None, sind sie.

Gibt es eine Möglichkeit zu verhindern, dass die {% regroup %} für einen bestimmten Grouper-Wert agiert? Ich könnte zwei verschiedene Abfragen in meinem views.py, um eigenständige Produkte von den anderen zu trennen, und nicht ihre Vorlage in die {% regroup %}, aber ich möchte vermeiden, zwei Abfragen zu machen, wenn es sein kann.

Jede Hilfe wird geschätzt! Dies ist meine erste Frage zu Stackoverflow, tut mir leid, wenn ich einige grundlegende Regeln über die Art, wie ich sie stelle, vermisse.

Antwort

1

Ich glaube nicht, dass Sie das in der Vorlage direkt tun können. Django beschränkt absichtlich die "Werkzeuge", die in seiner Vorlagensprache verfügbar sind, um zu verhindern, dass zu viel Logik in die Vorlagen eingefügt wird.

Während Sie die Arbeit in views.py tun könnten, was Sie tun, ist ziemlich präsentational, würde ich vorschlagen, ein custom template tag (genauer gesagt ein inclusion tag) ist wahrscheinlich, was Sie wollen.

Sie sollten mehrere Abfragen vermeiden können, da die Gruppierungslogik sehr einfach ist. Ich schlage vor, collections.defaultdict für einfache Gruppierung zu betrachten.

Verwandte Themen