سؤال

في موقع view.py الخاص بي، أقوم بإنشاء قائمة مكونة من صفين، حيث يكون العنصر الثاني في الصف عبارة عن قائمة أخرى، مثل هذا:

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

في لغة بايثون القديمة، يمكنني تكرار القائمة على النحو التالي:

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

أحصل على هذا الخطأ من جانغو:

تم اكتشاف استثناء أثناء العرض:يجب أن تدعم الوسيطة المضغوطة رقم 2 التكرار

بالطبع، هناك بعض علامات HTML في القالب، وليس بيانات الطباعة.هل تفريغ Tuple غير مدعوم في لغة قالب Django؟أم أنني أتعامل مع هذا بطريقة خاطئة؟كل ما أحاول القيام به هو عرض تسلسل هرمي بسيط للكائنات - هناك العديد من أنواع المنتجات، كل منها يحتوي على العديد من المنتجات (فيmodels.py، يحتوي المنتج على مفتاح خارجي لـ 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 %}

تعتمد الطريقة التي يتم بها تفكيك المجموعات/القوائم في الحلقات على العنصر الذي تم إرجاعه بواسطة مكرر القائمة.في كل تكرار تم إرجاع عنصر واحد فقط.في المرة الأولى، 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 %}

لا تنس العناصر المتغيرة في بيانات القاموس

إذا كان لديك رقم ثابت في صفوفك، فيمكنك فقط استخدام الفهرسة.كنت بحاجة إلى مزج القاموس وكانت القيم عبارة عن صفوف، لذلك قمت بما يلي:

في العرض:

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

في القالب:

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

ما عليك سوى إرسال القالب بقائمة بأنواع المنتجات والقيام بشيء مثل:

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

لقد مر وقت طويل حتى لا أستطيع أن أتذكر بالضبط ما هو بناء الجملة، اسمحوا لي أن أعرف إذا كان ذلك يعمل.افحص ال توثيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top