Jinja: أضف معاملات Bitwise

تم إنشاؤها على ١٠ يوليو ٢٠١٣  ·  9تعليقات  ·  مصدر: pallets/jinja

للتأكد من اكتمالها ، يجب السماح بالعاملين على مستوى البت. حاليًا ، يتعين على المرء القيام بما يلي من أجل إجراء إزاحة على عدد صحيح.

{{ (12).__rshift__(other) }}

ال 9 كومينتر

لا يجب استخدام عمليات Bitwise ops في القوالب. كشف الوظائف إذا كنت بحاجة إلى ذلك.

واو ، هذه وجهة نظر عنيدة.

أجد نفسي أستخدم jinja مع Home Assistant وأتلاعب بألوان RGB. أريد تقديم {'r': 255, 'g': 255, 'b': 255} 0xRRGGBB لكن لا حظ لأن jinja لا تأتي مع هذه الميزات المفيدة.

ما هو اقتراحك للتغلب على هذا؟ سوف يعمل تنفيذ الوظائف بالفعل ولكن ماذا لو أراد شخص ما 0xBBGGRR ؟ أليست مهمة jinja أن تدع المستخدم يقرر التصيير؟
أوافق على عدم إساءة استخدام ميزة مثل هذه ولكن هناك حالات استخدام لها.

آسف إذا وجدت هذا التعليق قاسياً ، فهذه ليست نيتي. أواجه اليأس الحقيقي: البكاء:

لا تحتاج إلى عوامل تشغيل أحاديات لذلك. فقط استخدم تنسيق السلسلة:

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) }}

شكرًا لك ، لقد أضفت طريقة لتحويلها مرة أخرى إلى النظام العشري

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) | int(base=16) }}

ألاحظ أنك تستخدم .format بدلاً من الفلتر format . أنا في حيرة من أمري لمعرفة ما هو مسموح وما هو غير مسموح به في قالب jinja. ما هي الطريقة المفضلة للقيام بذلك؟ متى تستخدم واحدة أو أخرى؟

نقلاً عن zen of Python: There should be one-- and preferably only one --obvious way to do it.

الرجاء استخدام IRC أو القائمة البريدية لهذا النوع من المناقشة.

يمكن أيضًا استخدام الفلتر format :

{{ '0x%(r)02X%(g)02X%(b)02X'|format(**color) }}

يقوم عامل التصفية format بشكل أساسي بلف عامل modulo ، مما يتيح آلية تنسيق سلسلة Python القديمة . من ناحية أخرى ، لا تأتي طريقة format حتى من jinja2 ، ولكنها طريقة مضمنة من str و unicode كائنات في Python ، وتستخدم في آلية تنسيق السلسلة الجديدة .

في Python ، تُفضل الآلية الجديدة على الآلية القديمة ، لكن في jinja2 نحب الحفاظ على واجهة برمجة تطبيقات مستقرة. إذا لم يكن الأمر يتعلق بالتوافق مع الإصدارات السابقة ، فأعتقد أننا ربما أزلنا أو قمنا بتغيير عامل التصفية format . لست متأكدًا مما أقترحه هنا ، على ما أعتقد ، فقط استخدم ما تفضله.

لكن نعم ، أصبحت هذه المناقشة خارج الموضوع ، وربما لا يكون هذا هو المكان المناسب لمواصلة ذلك.

أنا أيضًا في حاجة إلى عمليات ثنائية - على الأقل مقارنات. لدي مستشعر في HomeAssistant يستخدم قيمة قناع بت لتمثيل عدة حالات في قيمة واحدة. في HomeAssistant ، أريد تقسيم قيمة قناع البت إلى قيم مستشعر فردية والتي سيكون من السهل القيام بها باستخدام نموذج بسيط {{ state(sensor.with_bitmaskvalue) & 1 }} كقالب قيمة لجهاز الاستشعار الخاص بي. في الوقت الحالي ، يكاد يكون من المستحيل القيام بذلك عبر قالب Jinja - على الأقل وفقًا لبحثي

يبدو أنه يجب عليهم كشف اختبار مخصص مثل state(sensor.with_bitmaskvalue) is bitmask 1

آسف للضوضاء ، لقد اكتشفت للتو أنهم أضافوا مرشحًا مخصصًا bitwise_and() وهو الأمر بالنسبة لي

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات