Taquigrafia Jinja2 condicional


180

Diga que tenho isso:

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

No PHP, digamos, eu posso escrever uma condicional abreviada, como:

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

Existe então uma maneira de traduzir isso para trabalhar em um modelo jinja2:

'yes' if foo else 'no'

Não sei se isso ajuda, mas a expressão php se parece muito com o que é chamado de "operador ternário" em linguagens C. A linha final é chamada de "expressão condicional" em python, embora eu tenha visto a chamada de operador ternário em python também. De qualquer forma, eu menciono isso, pois pode ajudar a saber os nomes dessas coisas em uma pesquisa no Google.
mgilson

Respostas:


350

Sim, é possível usar expressões if em linha :

{{ 'Update' if files else 'Continue' }}

74
Uma abreviação para {{ value if value else 'No value' }}seria{{ value or 'No value' }}
Don Grem

11
@DorinGrecu Meu código não é completa com {{ tobe or 'Not to be' }}graças a você :)
dcohenb

14
Se você precisar usar uma variável, também poderá usar o interior {% %}. Como{% set your_var = 'Update' if files else 'Continue' %}
jhpg 25/06

1
@dcohenb, faça como uma pergunta separada. ;)
deed02392

3

Maneira alternativa (mas não é o estilo python. É o estilo JS)

{{ files and 'Update' or 'Continue' }}

1
Essa construção não é realmente aplicável em idiomas que interpretam uma string vazia como falsa. True and '' or 'a'avaliará para a, que não é o que foi planejado.
Gabriel Jablonski

Mas python3 interpreta uma string vazia como False. Então, se você escrever '' or 'a'python, responderá 'a'. Portanto, seu comentário pode estar relacionado a Ruby, por exemplo
user3713526 13/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.