2015-03-05 25 views
8

jinja2 có bộ lọc '| default()' để hoạt động với các biến không xác định. Nhưng nó không hoạt động với các giá trị từ điển.giá trị mặc định cho từ điển trong jinja2 (ansible)

nếu D có thể có hoặc không có foo chìa khóa (D [foo]), hơn:

{{ D[foo]|default ('no foo') }} 

sẽ in 'không foo' nếu D là undefined, nhưng sẽ gây ra lỗi ('đối tượng dict' có không có thuộc tính 'foo') nếu D được xác định, nhưng D [foo] không xác định.

Có cách nào để đặt mặc định cho mục từ điển không?

Trả lời

9

Điều này có vẻ hoạt động bình thường đối với tôi, sử dụng Ansible 1.7.2. Dưới đây là một thử nghiệm playbook tôi chỉ viết:

--- 
- hosts: localhost 
    vars: 
    D: 
    1 : "one" 
    2 : "two" 
    tasks: 
     - debug: var=D 

     - debug: msg="D[1] is {{ D[1]|default ('undefined') }}" 

     - debug: msg="D[3] is {{ D[3]|default ('undefined') }}" 

Và đây là kết quả từ chạy nó:

TASK: [debug var=D] *********************************************************** 
ok: [localhost] => { 
    "D": { 
     "1": "one", 
     "2": "two" 
    } 
} 

TASK: [debug msg="D[1] is one"] *********************************************** 
ok: [localhost] => { 
    "msg": "D[1] is one" 
} 

TASK: [debug msg="D[3] is undefined"] ***************************************** 
ok: [localhost] => { 
    "msg": "D[3] is undefined" 
} 
+0

Cảm ơn bạn. Nó hoạt động. Và tôi đã tìm thấy sai lầm ở những nơi khác nhau, gây ra lỗi tương tự gây nhầm lẫn. –

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