Jinja2 tốc ký có điều kiện


180

Nói rằng tôi có điều này:

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

Trong PHP, tôi có thể viết một tốc ký có điều kiện, như:

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

Có cách nào để tôi có thể dịch cái này để làm việc trong một mẫu jinja2 không:

'yes' if foo else 'no'

Tôi không biết điều này có giúp ích gì không, nhưng biểu thức php trông rất giống với cái được gọi là "toán tử ternary" trong các ngôn ngữ giống như C. Dòng cuối cùng được gọi là "biểu thức điều kiện" trong python, mặc dù tôi đã thấy nó được gọi là toán tử ternary trong python. Dù sao, tôi đề cập đến nó vì nó có thể giúp biết tên của những thứ đó trong một tìm kiếm google.
mgilson

Câu trả lời:


350

Có, có thể sử dụng biểu thức if nội tuyến :

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

74
Một tốc ký {{ value if value else 'No value' }}sẽ là{{ value or 'No value' }}
Don Grem 30/12/14

11
@DorinGrecu Mã của tôi không đầy đủ {{ tobe or 'Not to be' }}nhờ có bạn :)
dcohenb 15/03/2016

14
Nếu bạn cần sử dụng một biến, bạn cũng có thể sử dụng bên trong {% %}. Thích{% set your_var = 'Update' if files else 'Continue' %}
jhpg

1
@dcohenb xin hỏi như một câu hỏi riêng. ;)
deed02392

3

Cách khác (nhưng không phải kiểu python. Đó là kiểu JS)

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

1
Cấu trúc này không thực sự có thể áp dụng trong các ngôn ngữ diễn giải một chuỗi rỗng là sai. True and '' or 'a'sẽ đánh giá a, đó không phải là những gì đã được dự định.
Gabriel Jablonski

Nhưng python3 diễn giải chuỗi rỗng là False. Vì vậy, nếu bạn viết '' or 'a'python sẽ trả lời 'a'. Vì vậy, bình luận của bạn có thể liên quan đến Ruby chẳng hạn
user3713526
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.