2017-11-17 1 views
2

현재 전자 상거래 프로젝트 (django-oscar 사용)에서 작업하고 있는데, 바구니 템플릿에 관한 제품 표시 문제가 있습니다.장고 템플릿 {% regroup %} : 그루퍼 값이 없음 일 경우 처리합니다.

독립형, 부모 또는 자식과 같은 여러 유형의 제품이 있으므로 {% 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에서 :

것은 내가 그들이 독립 실행 형 제품이기 때문에 재 그룹에서, {% else %} 부분으로 행동하지 않는다는 것입니다
{% 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 %} 

재편성되지 않아야합니다. 그러나 그 product.parent, 즉 그루퍼는 None이므로

특정 그룹화 값에 대해 {% regroup %}이 작동하지 않도록 할 방법이 있습니까? 내 views.py에서 독립형 제품을 다른 제품과 분리하고 두 번째 템플릿을 {% regroup %}에 포함시키지 않고 두 가지 쿼리를 만들 수는 있지만 두 가지 쿼리를 사용하지 않는 것이 좋습니다.

도움을 주셨습니다. Stackoverflow에 대한 첫 번째 질문입니다. 미안하지만 내가 묻는 방식에 대한 몇 가지 기본 규칙을 놓친 경우입니다.

답변

1

나는 그것이 템플릿에서 직접 할 수 있다고 생각하지 않습니다. 장고는 의도적으로 템플릿 언어에서 사용 가능한 '도구'를 제한하여 너무 많은 논리를 템플릿에 넣지 않도록합니다. 당신이하고있는 것은 매우 표현 적이다, 나는이 제안이 views.py에서 일을 할 수있는 반면

하는 custom template tag (더 구체적으로 inclusion tag가) 당신이 원하는 아마.

그룹화 논리가 매우 간단하므로 여러 쿼리를 피할 수 있어야합니다. 간단한 그룹화를 위해 collections.defaultdict을 살펴볼 것을 제안합니다.