لدى Django هذه العلامة الرائعة حقًا المسماة {٪ blank٪} ، والتي تتيح لك القيام بذلك:
{% for item in list %}
<tr><td>{{ item }}</td></tr>
{% empty %}
<tr><td>Nothing to show!</td></tr>
{% endfor %}
وهو اختصار ل
{% if list %}
{% for item in list %}
<tr><td>{{ item }}</td?</tr>
{% endfor %}
{% else %}
<tr><td>Nothing to show!</td></tr>
{% endif %}
منذ التحول إلى jinja ، فاتني حقًا هذه العلامة :(
هذا موجود بالفعل. استخدم {% else %}
في حلقة for. لسوء الحظ ، كان لدينا شيء آخر قبل أن يخلق Django فارغًا وإعادة تسميته الآن لمطابقة دلالات Django أمر غريب نوعًا ما.
حسنا أرى ذلك. ربما تضع ملاحظة عن ذلك في "التبديل من محركات القوالب الأخرى" ضمن قسم django؟
لا أرى هذا في وثائق التحويل . إنه مذكور في قواعد الضوابط : للتوثيق ولكن سيكون من المفيد أن يكون موجودًا في مستند التبديل ...
إذا كان الرمز list
$ # $ منشئًا وكانت كتل for
و if
تعمل بنفس الطريقة كما في Python ، فإن التركيبة if-for
لا تحل المشكلة لأن المولدات صادقة دائمًا ، بالإضافة إلى أن مثل هذا البناء أقل اصطلاحًا من كتلة empty
.
لا أعرف ما إذا كان بإمكانك إضافة علامة للتحقق مما إذا كانت الحلقة قد تم تشغيلها أم لا ، تحقق من NameError: name 'item' is not defined
أو قم بإضافة متغير مساعد إلى list(generator)
على مستوى Jinja. إذا لم يكن الأمر كذلك ، فإن الحل الوحيد هو إضافة كتلة empty
أو إقناع مطوري Python بأن المولدات الفارغة يجب أن تكون خاطئة (لتجنب التحقق القبيح من خلال التعامل مع StopIteration
و "الدفع للخلف" العنصر المنبثق).
تعمل الكتلة else
في Jinja مثل الكتلة empty
في Django بالفعل. لا تغيير ضروري هنا.
التعليق الأكثر فائدة
هذا موجود بالفعل. استخدم
{% else %}
في حلقة for. لسوء الحظ ، كان لدينا شيء آخر قبل أن يخلق Django فارغًا وإعادة تسميته الآن لمطابقة دلالات Django أمر غريب نوعًا ما.