目前正在开展电子商务项目(使用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上的第一个问题,对不起,如果我错过了一些关于我问的方式的基本规则。
答案 0 :(得分:1)
我认为这不是你可以直接在模板中做的事情。 Django故意限制模板语言中可用的“工具”,以阻止在模板中加入太多逻辑。
虽然您可以在views.py
中完成工作,但正如您所做的那样非常具有表现力,我建议custom template tag(更具体地说是inclusion tag)可能就是您想要的
您应该能够避免多个查询,因为分组逻辑非常简单。我建议查看collections.defaultdict
进行简单分组。