2012-06-15 33 views
8

Giả sử tôi chuyển một từ điển vào mẫu jinja2 của tôi.
Trong giao diện tôi có cái gì đó nhưSửa đổi các thuộc tính từ điển trong jinja2

d = {} 
#set other template stuff into d 
get_params['cri'] = 'time' 
get_params['order'] = 'asc' 
d['get_params'] = get_params 
return d 

Trong mẫu tôi cần phải thay đổi giá trị của phím của get_params. Điều logic

{% set get_params.cri='src' %} 

thất bại với một lỗi

TemplateSyntaxError: expected token '=', got '.' 

Câu hỏi của tôi là làm thế nào để tôi sửa đổi các giá trị truyền cho một cuốn từ điển trong jinja2

(Câu hỏi này đã được hỏi here, nhưng tôi tìm câu trả lời khó hiểu và nó chỉ trả lời phần hợp nhất)

Trả lời EDIT:

Jinja2 cung cấp tiện ích 'do'. Để thêm rằng phần mở rộng để kim tự tháp, làm như sau trong tập tin __init__.py

#This line is alreadythere 
config.include('pyramid_jinja2') 
#Add this line 
config.add_jinja2_extension('jinja2.ext.do') 

Trong mẫu

{% do get_params.update({'cri':'src'}) %} 

Trả lời

4

Ý tưởng là bạn không thể thực hiện bài tập trong jinja2. Tuy nhiên, những gì bạn có thể làm (như được đề xuất trong bài viết khác mà bạn đã liên kết) là gọi một khối làm và thực hiện thao tác cập nhật (cập nhật là phương thức của bất kỳ dict nào trong python; http://docs.python.org/library/stdtypes.html#dict.update).

+0

Tôi đã nhận được phần cập nhật (Thực tế đang thực hiện ngay bây giờ trong {{}} thẻ nhưng không in được). Làm cách nào để sử dụng khối {% do%}. Mã sẽ được nhiều đánh giá cao. Đặc biệt làm thế nào để kích hoạt phần mở rộng jinja2 từ kim tự tháp – RedBaron

+1

Scratch mà ... quản lý để làm điều đó – RedBaron

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