Django - How to do tuple unpacking in a template 'for' loop

后端 未结 5 938
梦毁少年i
梦毁少年i 2020-12-13 05:57

In my views.py, I\'m building a list of two-tuples, where the second item in the tuple is another list, like this:

[ Product_Type_1, [ product_1, product_2 ]         


        
相关标签:
5条回答
  • 2020-12-13 06:18

    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>
    
    0 讨论(0)
  • 2020-12-13 06:19

    it would be best if you construct your data like {note the '(' and ')' can be exchanged for '[' and ']' repectively, one being for tuples, one for lists}

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

    and have the template do this:

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

    the way tuples/lists are unpacked in for loops is based on the item returned by the list iterator. each iteration only one item was returned. the first time around the loop, Product_Type_1, the second your list of products...

    0 讨论(0)
  • 2020-12-13 06:22

    You must used this way:

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

    Don't forget the variable items in the dictionary data

    0 讨论(0)
  • 2020-12-13 06:23

    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.

    0 讨论(0)
  • 2020-12-13 06:29

    Another way is as follows.

    If one has a list of tuples say:

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

    then one can unpack this list in the template file in the following manner. In my case I had a list of tuples which contained the URL, title, and summary of a document.

    {% for item in mylst %}    
         {{ item.0 }} {{ item.1}} {{ item.2 }}    
    {% endfor %}
    
    0 讨论(0)
提交回复
热议问题