Jinja: Tambahkan operator Bitwise

Dibuat pada 10 Jul 2013  ·  9Komentar  ·  Sumber: pallets/jinja

Untuk kelengkapan, operator bitwise harus diizinkan. Saat ini, seseorang harus melakukan hal berikut untuk melakukan pergeseran pada bilangan bulat.

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

Semua 9 komentar

Operasi bitwise tidak boleh digunakan dalam template. Ekspos fungsi jika perlu.

Wow, itu sudut pandang yang berpendirian.

Saya menemukan diri saya menggunakan jinja dengan Home Assistant dan memanipulasi warna RGB. Saya ingin merender {'r': 255, 'g': 255, 'b': 255} sebagai format 0xRRGGBB tetapi tidak berhasil karena jinja tidak datang dengan fitur-fitur praktis tersebut.

Apa saran Anda untuk mengatasi ini? Menerapkan fungsi memang akan berhasil tetapi bagaimana jika seseorang menginginkan 0xBBGGRR ? Bukankah tugas jinja untuk membiarkan pengguna memutuskan rendering?
Saya setuju bahwa fitur seperti ini tidak boleh disalahgunakan tetapi ada kasus penggunaan untuk itu.

Maaf jika Anda menganggap komentar ini kasar, ini bukan niat saya. Saya menghadapi keputusasaan sejati :cry:

Anda tidak perlu operator bitwise untuk itu. Cukup gunakan pemformatan string:

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

Terima kasih, saya menambahkan cara untuk mengubahnya kembali ke desimal

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

Saya perhatikan Anda menggunakan .format alih-alih format filter . Saya agak bingung untuk mengetahui apa yang diperbolehkan dan apa yang tidak diperbolehkan dalam template jinja. Apa cara yang lebih disukai untuk melakukan ini? Kapan harus menggunakan satu atau yang lain?

Mengutip zen Python: There should be one-- and preferably only one --obvious way to do it.

Silakan gunakan IRC atau milis untuk diskusi semacam ini.

Menggunakan filter format juga dimungkinkan:

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

Filter format pada dasarnya hanya membungkus modulo-operator, mengaktifkan mekanisme pemformatan string lama Python. Metode format , di sisi lain, bahkan tidak berasal dari jinja2, tetapi merupakan metode bawaan dari objek str dan unicode dengan Python, dan digunakan untuk mekanisme pemformatan string baru .

Di Python, mekanisme baru lebih disukai daripada yang lama, tetapi di jinja2 kami ingin mempertahankan API yang stabil. Jika bukan karena kompatibilitas mundur, saya pikir kami mungkin telah menghapus atau mengubah filter format . Saya tidak yakin apa yang harus disarankan di sini, saya kira, gunakan saja yang Anda suka.

Tapi ya, diskusi ini menjadi di luar topik, dan ini mungkin bukan tempat yang tepat untuk melanjutkannya.

Saya juga membutuhkan operasi bitwise - setidaknya perbandingan. Saya memiliki sensor di HomeAssistant yang menggunakan nilai bitmask untuk mewakili beberapa status dalam satu nilai. Di HomeAssistant saya ingin membagi nilai bitmask ini menjadi nilai sensor individual yang akan mudah dilakukan dengan {{ state(sensor.with_bitmaskvalue) & 1 }} sederhana sebagai template nilai untuk sensor saya. Saat ini hampir tidak mungkin untuk melakukan ini melalui template Jinja - setidaknya menurut penelitian saya

Sepertinya mereka harus mengekspos tes khusus seperti state(sensor.with_bitmaskvalue) is bitmask 1

maaf atas kebisingannya, saya baru saja menemukan bahwa mereka menambahkan filter khusus bitwise_and() yang berhasil untuk saya

Apakah halaman ini membantu?
0 / 5 - 0 peringkat