Jinja: map() filter mengembalikan string "<generator object="" do_map="" at="">"</generator>

Dibuat pada 3 Jan 2014  ·  7Komentar  ·  Sumber: pallets/jinja

Biarkan zonelist menjadi struktur data seperti ini:

[{'zones': ['pe.com', 'ps.de', 'p-s.de'], 'file': 'gm'},
 {'zones': ['p-e.net', 'ps.net', 'p-s.net'], 'file': 'grpc'}]

Saat menggunakan zonelist|map(attribute='file'), string seperti ini dikembalikan:

<generator object do_map at 0x10bd730>

Perilaku yang diharapkan adalah mengembalikan daftar yang berisi atribut 'file' dari zonelist.

Ternyata ada solusi: Menggunakan misalnya zonelist|map(attribute='file') |list atau zonelist|map(attribute='file') |sort akan menghasilkan daftar yang diharapkan:

[gm, grpc]

Saya menggunakan Jinja 2.7.1 dengan Ansible 1.4.3.

Komentar yang paling membantu

Saya tidak ingin mengubah ini karena ini akan menyebabkan kinerja fungsi-fungsi ini turun yang biasanya hanya digunakan dengan iterasi. |list memperbaikinya.

Semua 7 komentar

Ini bukan bug. Apakah Anda mencoba menampilkan JSON?

Ya, harapan saya adalah bahwa map() mengembalikan daftar. Dan itu bukan bug? Jadi itu berarti map() hanya akan digunakan sebagai fungsi perantara dengan beberapa filter lain seperti |join atau |list ditambahkan ke dalamnya? Hmmm. Mungkin itu harus dinyatakan secara eksplisit dalam dokumentasi.

Anda seharusnya tidak hanya mencetak repr dari objek Python arbitrer untuk dimasukkan langsung ke Javascript. Dalam kasus Anda, Anda tampaknya beruntung, tergantung pada kontennya, namun, Anda mungkin benar-benar mendapatkan JSON yang tidak valid, dan itu juga mungkin merupakan kelemahan keamanan yang sangat besar. Tambahkan filter list dan tojson untuk mendapatkan JSON yang valid, atau pengecualian ketika objek tidak dapat dikodekan ke JSON.

Fakta bahwa repr dari sebagian besar bawaan Python adalah JSON-ish bukanlah suatu kebetulan, tetapi repr tidak pernah menjadi sesuatu yang harus diandalkan untuk logika program yang sebenarnya.

Juga, saya tidak melihat di mana pun di dokumen Jinja yang menyiratkan bahwa map akan mengembalikan sesuatu yang lebih spesifik daripada urutan.

Saya tidak ingin mengubah ini karena ini akan menyebabkan kinerja fungsi-fungsi ini turun yang biasanya hanya digunakan dengan iterasi. |list memperbaikinya.

Saya tidak tahu tentang solusi {{ ... | list }} untuk masalah <generator object do_map at 0xdeadbeef> ansbile.

Terima kasih telah mengajukan ini!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat