2011-10-06 29 views
9

Tôi đoán chỉ là tôi tò mò về những hoạt động nào được cho phép trong dấu ngoặc jinja2, ví dụ: những gì tôi đang cố gắng làm là thực hiện một thao tác trên dữ liệu nhúng như vậy:Làm tròn trong ngoặc đơn jinja2

{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }} 

này ném lỗi trên traceback:

UndefinedError: 'round' is undefined

Tương tự như vậy khi tôi cố gắng sử dụng 'abs' trong một ngoặc jinja block, tôi nhận được một lỗi Undefined - mặc dù chúng đều là các hàm lib chuẩn. Có cách nào để thực hiện thao tác này trong quá trình tạo mẫu không, thay vì trước khi truyền dữ liệu?

+0

Nói chung, bạn muốn thực hiện các phép tính trong mã chương trình, không phải trong mẫu của bạn. Tôi không chắc chắn những gì bạn nghĩ rằng khung của Jinja2 làm, nhưng những gì họ không làm là cho phép bạn nhúng mã python trong các mẫu của bạn. – geoffspear

Trả lời

24

Ngôn ngữ khuôn mẫu jinja2 khác với ngôn ngữ python. Trong jinja2, hoạt động trên các giá trị thường được thực hiện trong các bộ lọc: {{ something | operation }}. Bạn có thể tìm thấy list of filters trong tài liệu jinja2.

Ví dụ, để round, bạn có thể làm:

{{ 42.55|round }} 

này sẽ hiển thị "42" trên trang web. Bộ lọc abs tồn tại theo cùng một cách.

Xin lưu ý rằng các bộ lọc này chỉ có thể được sử dụng để thay đổi giá trị trước khi hiển thị và có thể được sử dụng để tính toán. Tuy nhiên, tính toán không được thực hiện trong mẫu.

+1

+1. Chỉ cần thêm vào điều này, các đối tượng và chức năng có sẵn được tiêm thông qua [bối cảnh] (http://jinja.pocoo.org/docs/api/#the-context) chỉ chứa một vài mục đặc biệt theo mặc định. – Cameron

+0

Cảm ơn, tôi đã nhảy vào sử dụng thư viện mẫu python nghĩ rằng nó giống như các trang máy chủ PHP hoặc Java. Điều này trả lời câu hỏi của tôi. – maxm

+1

"Tuy nhiên, tính toán không được thực hiện trong mẫu." <- Đây là lời khuyên nghèo nàn. Lấy ví dụ một bảng dữ liệu, nơi các số cần được hiển thị theo nhiều cách khác nhau trong nhiều cột. – sobri

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