Jinja2 singkatan tulisan tangan

180

Katakan saya punya ini:

{% if files %}
    Update
{% else %}
    Continue
{% endif %}

Dalam PHP, katakanlah, saya dapat menulis conditional stance, seperti:

<?php echo $foo ? 'yes' : 'no'; ?>

Apakah ada cara saya bisa menerjemahkan ini agar berfungsi di templat jinja2:

'yes' if foo else 'no'
Ahmed Nuaman
sumber
Saya tidak tahu apakah ini membantu, tetapi ekspresi php sangat mirip dengan apa yang disebut "operator ternary" dalam bahasa mirip C. Baris terakhir disebut "ekspresi kondisional" dengan python, meskipun saya pernah melihatnya disebut operator ternary dengan python juga. Lagi pula, saya menyebutkannya karena mungkin membantu untuk mengetahui nama-nama hal-hal itu dalam pencarian google.
mgilson

Jawaban:

350

Ya, dimungkinkan untuk menggunakan in -if-expressions :

{{ 'Update' if files else 'Continue' }}
menjadi nyata
sumber
74
Sebuah singkatan {{ value if value else 'No value' }}adalah{{ value or 'No value' }}
Don Grem
11
@DorinGrecu Kode saya tidak lengkap dengan {{ tobe or 'Not to be' }}terima kasih :)
dcohenb
14
Jika Anda perlu menggunakan variabel, Anda juga bisa menggunakannya {% %}. Seperti{% set your_var = 'Update' if files else 'Continue' %}
jhpg
1
@dcohenb tolong ajukan pertanyaan terpisah. ;)
deed02392
3

Cara alternatif (tapi itu bukan gaya python. Ini gaya JS)

{{ files and 'Update' or 'Continue' }}
pengguna3713526
sumber
1
Konstruk ini tidak benar-benar berlaku dalam bahasa yang mengartikan string kosong sebagai falsy. True and '' or 'a'akan mengevaluasi untuk a, yang bukan apa yang dimaksudkan.
Gabriel Jablonski
Tapi python3 mengartikan string kosong sebagai False. Jadi jika Anda menulis '' or 'a'python akan menjawab 'a'. Jadi komentar Anda dapat dikaitkan dengan Ruby misalnya
user3713526