2009-09-14 43 views
23

Tôi đang sử dụng thư viện lxml để xác định biến (danh mục) trong chế độ xem. lxml cung cấp phương thức .get để truy xuất thuộc tính tùy chỉnh. Tôi muốn sử dụng nó trong các mẫu như sau:Làm thế nào để vượt qua một đối số cho một phương pháp trên một biến mẫu trong Django?

{{ category.get("foo") }} 

Tôi biết rằng khi sử dụng các biến mẫu không cần thiết phải sử dụng dấu ngoặc đơn, nhưng tôi nhận được lỗi sau:

{{ category.get "foo" }} 

Could not parse the remainder: ' "foo"' from 'category.get "foo"'

Tôi giả định rằng có điều gì đó sai trái với cú pháp của tôi nhưng google không giúp được gì. Tài liệu django nói rằng các phương pháp được tra cứu bằng cách sử dụng một số .

+0

Cú pháp được sử dụng trong bộ lọc mẫu Django là ":" cho các đối số, vì vậy tôi nghĩ nếu có ai đó thực hiện điều này, nó sẽ là {{category.get: foo}}. Nhưng, nó không tồn tại. Có lẽ bạn nên thêm nó? – slacy

+0

Có thể trùng lặp của [Làm thế nào để gọi chức năng mà có một đối số trong một mẫu Django?] (Http://stackoverflow.com/questions/2468804/how-to-call-function-that-takes-an-argument-in- a-django-template) –

Trả lời

32

Bạn không thể chuyển đối số cho thuộc tính có thể gọi được như thế này. Kéo giá trị trong chế độ xem hoặc viết thẻ mẫu tùy chỉnh để thực hiện.

+0

Có cách nào để có quyền truy cập vào các biến khác, như yêu cầu hiện tại (ví dụ: request.user) hoặc đối tượng ngữ cảnh hiện tại không? – slacy

+1

bạn có thể trong một templatetag tùy chỉnh –

+0

Bạn đã có quyền truy cập vào request.user – OllyTheNinja

15

Tôi đồng ý với triết lý của tách logic từ thiết kế, nhưng có một ngoại lệ. Tôi hiện đang viết một phương thức get_image (height = xxx, width = xxx) cho một mô hình. Rõ ràng, cần thiết lập trình thiết kế mẫu để quyết định kích thước của hình ảnh là giai đoạn cuối cùng. Mặc dù tôi cho rằng điều đúng đắn cần làm là viết một thẻ tùy chỉnh, nhưng tại sao lại hạn chế?

+1

Hoàn toàn đúng. Nó không phải là "câu trả lời", giống như một nhận xét, nhưng +1 –

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