Development Tip

Django-템플릿 'for'루프에서 튜플 풀기 방법

yourdevel 2021. 1. 5. 19:42
반응형

Django-템플릿 'for'루프에서 튜플 풀기 방법


내 views.py에서 튜플의 두 번째 항목이 다음과 같은 또 다른 목록 인 두 개의 튜플 목록을 작성하고 있습니다.

[ Product_Type_1, [ product_1, product_2 ],
  Product_Type_2, [ product_3, product_4 ]]

평범한 오래된 Python에서는 다음과 같이 목록을 반복 할 수 있습니다.

for product_type, products in list:
    print product_type
    for product in products:
        print product

내 Django 템플릿에서 동일한 작업을 수행 할 수없는 것 같습니다.

{% for product_type, products in product_list %}
    print product_type
    {% for product in products %}
        print product
    {% endfor %}
{% endfor %}

Django에서이 오류가 발생합니다.

렌더링 중 예외 발생 : zip 인수 # 2는 반복을 지원해야합니다.

물론 템플릿에는 print 문이 아닌 HTML 마크 업이 있습니다. Django 템플릿 언어에서 튜플 압축 해제가 지원되지 않습니까? 아니면 잘못된 방향으로 가고 있습니까? 내가하려는 것은 객체의 간단한 계층 구조를 표시하는 것뿐입니다. 각각 여러 제품이있는 여러 제품 유형이 있습니다 (models.py에서 Product에는 간단한 일대 다 관계인 Product_type에 대한 외래 키가 있음).

분명히 저는 Django를 처음 접했기 때문에 어떤 입력이라도 감사하겠습니다.


{ '('및 ')'를 '['및 ']'로 반복적으로 교환 할 수 있습니다. 하나는 튜플, 하나는 목록}과 같은 데이터를 구성하는 것이 가장 좋습니다.

[ (Product_Type_1, ( product_1, product_2 )),
   (Product_Type_2, ( product_3, product_4 )) ]

템플릿이 다음을 수행하도록합니다.

{% for product_type, products in product_type_list %}
    {{ product_type }}
    {% for product in products %}
        {{ product }}
    {% endfor %}
{% endfor %}

튜플 / 목록이 for 루프에서 압축 해제되는 방식은 목록 반복자가 반환 한 항목을 기반으로합니다. 각 반복마다 하나의 항목 만 반환되었습니다. 처음에는 Product_Type_1, 두 번째는 제품 목록 ...


또 다른 방법은 다음과 같습니다.

튜플 목록이 있으면 다음과 같이 말합니다.

mylst = [(a, b, c), (x, y, z), (l, m, n)]

그러면 다음과 같은 방식으로 템플릿 파일에서이 목록의 압축을 풀 수 있습니다. 제 경우에는 문서의 URL, 제목 및 요약이 포함 된 튜플 목록이있었습니다.

{% for item in mylst %}    
     {{ item.0 }} {{ item.1}} {{ item.2 }}    
{% endfor %}

다음과 같이 사용해야합니다.

{% for product_type, products in product_list.items %}
    print product_type
    {% for product in products %}
        print product
    {% endfor %}
{% endfor %}

사전 데이터의 변수 항목을 잊지 마십시오


If you have a fixed number in your tuples, you could just use indexing. I needed to mix a dictionary and the values were tuples, so I did this:

In the view:

my_dict = {'parrot': ('dead', 'stone'), 'lumberjack': ('sleep_all_night', 'work_all_day')}

In the template:

<select>
  {% for key, tuple in my_dict.items %}
    <option value="{{ key }}" important-attr="{{ tuple.0 }}">{{ tuple.1 }}</option>
  {% endfor %}
</select>

Just send the template a list of product types and do something like:

{% for product_type in product_type_list %}
    {{ product_type }}
    {% for product in product_type.products.all %}
        {{ product }}
    {% endfor %}
{% endfor %}

It's been a little while so I can't remember exactly what the syntax is, let me know if that works. Check the documentation.

ReferenceURL : https://stackoverflow.com/questions/271077/django-how-to-do-tuple-unpacking-in-a-template-for-loop

반응형