تحقق مما إذا كان هناك متغير في TMPL_Context (Python ، Pylons ، Genshi)؟
سؤال
أحاول معرفة كيفية التحقق مما إذا كان هناك متغير في سياق القالب "TMPL_Context" باستخدام الأعمدة والبيثون. ما أحاول فعله هو:
لقد حصلت على قالب تخطيط أعمدة. يجب أن يحتوي هذا على قسم الرسائل إذا ، وفقط ، المتغير c.messages
موجود في السياق. يبدو قسم الرسائل هكذا:
<div py:if="len(c.messages) > 0">
<py:for each="msg in c.messages">
<strong>${msg}</strong>
</py:for>
</div>
هذا ينتج خطأ إذا لم تحدد وحدة التحكم c.messages. لذلك أود تضمين هذا فقط إذا تم تعريف المتغير. هل هناك حل لهذه المشكلة؟
المحلول
لدى Genshi طريقة محددة لـ JUT
إذا تم تعريفها (الرسائل):
http://genshi.edgewall.org/wiki/documentation/templates.html#defined-name
نصائح أخرى
تحويل الاختبار إلى hasattr(c, 'messages') and len(c.messages) > 0
.. أو ببساطة تعيين الرسائل على [] افتراضيًا
أقدر أنني أحفر خيطًا قديمًا ، لكن لدي حل بديل.
لقد ناضلت دائمًا في الحصول على تعريف () للعمل بشكل صحيح. الحل الأكثر فعالية الذي وجدته هو استخدام ما يلي لقائمة:
py:if="myobject.thelist.get('blah',0) == 0"
بيثون الأساسي في جينشي - إذا كان غير محدد ، فإننا نعطيها قيمة افتراضية. إذا كنت بحاجة إلى التأكد من أن القيمة الافتراضية لن تلوث بياناتك ، فقم بإرجاع شيء آخر بخلاف 0.