Django模板{%regroup%}:处理石斑鱼值为None时的情况

时间:2017-11-17 11:08:02

标签: django django-templates django-oscar

目前正在开展电子商务项目(使用django-oscar),我对篮子模板上的产品展示存在疑问。

我使用{% regroup %}标记,因为我有几种类型的产品:独立产品,父产品或子产品。每个篮子线对应一个产品,如果其中几个是共享相同父产品的孩子,我希望它们在他们的共同父母下重新分组。但是,我希望独立产品能够独立存在。

我的查询集如下:

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)

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 %}

问题在于我不希望重组在{% else %}部分中行动,因为它们是独立的产品,不应该重新组合。但是,正如他们的product.parent,即石斑鱼是None,他们是。{/ p>

有没有办法阻止{% regroup %}为某个石斑鱼价值行事?我可以在views.py中创建两个不同的查询,将独立产品与其他产品分开,而不是在{% regroup %}中包含他们的模板,但我想避免在可能的情况下进行两次查询。< / p>

任何帮助表示赞赏!这是我在Stackoverflow上的第一个问题,对不起,如果我错过了一些关于我问的方式的基本规则。

1 个答案:

答案 0 :(得分:1)

我认为这不是你可以直接在模板中做的事情。 Django故意限制模板语言中可用的“工具”,以阻止在模板中加入太多逻辑。

虽然您可以在views.py中完成工作,但正如您所做的那样非常具有表现力,我建议custom template tag(更具体地说是inclusion tag)可能就是您想要的

您应该能够避免多个查询,因为分组逻辑非常简单。我建议查看collections.defaultdict进行简单分组。