Jika saya memiliki daftar users
say ["Sam", "Bob", "Joe"]
, saya ingin melakukan sesuatu di mana saya dapat menampilkan dalam file template jinja saya:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Saya ingin membuat templat keluaran menjadi:
Sam, Bob, Joe
Saya mencoba kode di atas untuk memeriksa apakah itu pada iterasi terakhir dari loop dan jika tidak, maka jangan masukkan koma, tetapi tidak berhasil. Bagaimana saya melakukan ini?
!
sebagai operator negasi. "tidak" dieja "tidak".Jawaban:
Anda ingin
if
cek Anda menjadi:Perhatikan bahwa Anda juga dapat mempersingkat kode dengan menggunakan Jika Ekspresi :
sumber
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
Anda juga bisa menggunakan filter "gabung" bawaan ( http://jinja.pocoo.org/docs/templates/#join seperti ini:
sumber
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
Dan menggunakan
joiner
dari http://jinja.pocoo.org/docs/dev/templates/#joinerItu dibuat untuk tujuan yang tepat ini. Biasanya bergabung atau cek forloop. Terakhir akan cukup untuk satu daftar, tetapi untuk beberapa kelompok hal itu berguna.
Contoh yang lebih kompleks tentang mengapa Anda akan menggunakannya.
sumber
Kode berikut berfungsi menggunakan filter gabung jinja2 yang disarankan Uli Martens di python3.5 shell:
sumber