2015-01-02 14 views
28

Tôi có một cuốn từ điển python:Kiểm tra nếu chính tồn tại trong một dict Python trong Jinja2 các mẫu

settings = { 
    "foo" : "baz", 
    "hello" : "world" 
} 

này biến settings là sau đó có sẵn trong các mẫu Jinja2.

tôi muốn kiểm tra xem một chìa khóa myProperty tồn tại trong settings dict trong mẫu của tôi, và nếu như vậy mất một số hành động:

{% if settings.hasKey(myProperty) %} 
    takeSomeAction(); 
{% endif %} 

tương đương với hasKey mà tôi có thể sử dụng là gì?

+0

Chỉ cần kiểm tra: nếu settin gs [myproperty] không phải là Không: Tôi nghĩ rằng điều này sẽ làm việc. –

+0

hoặc nếu settings.myproperty được định nghĩa: –

Trả lời

13

này hoạt động tốt

{% if settings.myProperty %}

+1

'myProperty' có thể là biến trong phương pháp trên không? –

+4

Có, một khóa trong từ điển. Tương đương với '' hasKey''. Và btw, hasKey bị phản đối. Sử dụng '' in'' thay vì –

+11

khi setting.myProperty tồn tại, nhưng nó bằng 0 (số nguyên 0) hoặc giá trị boolean False, điều này nếu kiểm tra không cho 'hasKey'. Điều này có nghĩa là bạn cần: '' {% nếu 'myProperty' trong cài đặt%} '' – karelv

66

Giống như Mihai và karelv đã lưu ý, công trình này:

{% if 'blabla' in item %} 
    ... 
{% endif %} 

tôi nhận được một 'dict object' has no attribute 'blabla' nếu tôi sử dụng {% if item.blabla %}item không chứa một blabla phím

+2

Giống như tôi. Trong trường hợp cụ thể của tôi, tôi đang sử dụng Jinja2 bên trong Ansible. – chesterbr

Các vấn đề liên quan