Django memiliki tag yang sangat keren yang disebut {% kosong %}, yang memungkinkan Anda melakukan ini:
{% for item in list %}
<tr><td>{{ item }}</td></tr>
{% empty %}
<tr><td>Nothing to show!</td></tr>
{% endfor %}
yang merupakan kependekan dari
{% if list %}
{% for item in list %}
<tr><td>{{ item }}</td?</tr>
{% endfor %}
{% else %}
<tr><td>Nothing to show!</td></tr>
{% endif %}
Sejak beralih ke jinja, saya sangat merindukan tag ini :(
Itu sudah ada. Gunakan {% else %}
pada for loop. Sayangnya kami memiliki yang lain sebelum Django dibuat kosong dan mengganti namanya sekarang untuk mencocokkan semantik Django agak aneh.
Oh begitu. Mungkin berikan catatan itu di "Beralih dari Mesin Templat lain" di bawah bagian Django?
Saya tidak melihat ini di dokumentasi switching . Disebutkan dalam struktur kontrol : untuk dokumentasi tetapi akan sangat membantu jika ada di dokumen switching...
Jika list
dalam kode adalah generator dan blok for
dan if
bekerja dengan cara yang sama seperti di Python maka konstruk if-for
tidak menyelesaikan masalah karena generator selalu benar, ditambah konstruksi seperti itu kurang idiomatis daripada blok empty
.
Saya tidak tahu apakah Anda dapat menambahkan flag untuk memeriksa apakah loop telah berjalan, memeriksa NameError: name 'item' is not defined
atau menambahkan variabel pembantu ke list(generator)
di level Jinja. Jika tidak, maka satu-satunya solusi adalah menambahkan blok empty
atau meyakinkan pengembang Python bahwa generator kosong seharusnya palsu (untuk menghindari pemeriksaan yang buruk dengan menangani item yang muncul StopIteration
dan "mendorong kembali").
Blok else
di Jinja sudah bekerja seperti blok empty
di Django. Tidak ada perubahan yang diperlukan di sini.
Komentar yang paling membantu
Itu sudah ada. Gunakan
{% else %}
pada for loop. Sayangnya kami memiliki yang lain sebelum Django dibuat kosong dan mengganti namanya sekarang untuk mencocokkan semantik Django agak aneh.