2012-03-19 16 views
6

Hãy chỉ nói rằng tôi cần phải hiển thị một số lượng HTML nhất định trên và hơn trong một trang, ví dụ, để biết thông tin tiểu sử của người dùng. Các macro của Jinja dường như hoàn toàn phù hợp với cách sử dụng đó. Tuy nhiên, Django không có macro.Điều gì sẽ là một tương đương thích hợp của các macro của Jinja trong hệ thống templating của Django?

Hiện tại, tôi đang sử dụng bộ lọc tùy chỉnh cho cùng một mục đích - đây có phải là cách tốt nhất để thực hiện hay không, tôi có đang thiếu gì đó không?

Cảm ơn.


ps. Tôi đang di chuyển một ứng dụng chạy trên GAE với webapp2 & Jinja đến Django.

+0

Jinja mở rộng các mẫu django để có được xung quanh một số hạn chế của hệ thống templating của django. thẻ chặn của macro là một cái gì đó là jinja cụ thể. Cách duy nhất để mô phỏng điều này là thông qua (như bạn đã nói) các thẻ tùy chỉnh và các bộ lọc, và đôi khi chúng có thể trở nên khá cồng kềnh. –

Trả lời

7

Sau khi thêm một số tài liệu khác, tôi cuối cùng đã tìm thấy "correct" way to do this: custom inclusion tags, cho phép bạn tạo thẻ từ mẫu.

+2

Bạn có thể sử dụng jinja thay vào đó, nếu bạn muốn. – Marcin

+2

Liên kết này đã chết. Đây là một cái mới: https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/#inclusion-tags – fluffels

2

Có hai cách tiếp cận khác mà bạn có thể thực hiện: blocksincludes. Với các khối bạn sẽ phải bao gồm nó tất cả các cách thức thông qua các sợi thừa kế. Với tính năng này, bạn chỉ cần tải khi cần nhưng bạn phải đảm bảo rằng bạn đang chuyển các biến ngữ cảnh thích hợp từ chế độ xem của mình. Tuy nhiên, cách tiếp cận hiện tại của bạn có lẽ là hữu ích nhất về DRY.

+0

Cảm ơn; Tôi chỉ muốn xác nhận. Có lý do cụ thể nào khiến Django không nhặt được macro từ Jinja không? – aviraldg

+0

@aviraldg Hệ thống mẫu của Django không mạnh bằng thiết kế. – Marcin

1

Django không có macro, do đó, đó là bộ lọc tùy chỉnh hoặc tách mã lặp lại trong mẫu của riêng nó và bao gồm nó lặp đi lặp lại với các đối số khác nhau được truyền qua "bằng". Nhưng bạn thực sự có thể sử dụng hệ thống jinja2 templating với django hoàn toàn tốt.

0

Chỉ để ghi lại, tôi thực sự đã dành một chút thời gian thích ứng với đoạn mã đã tồn tại trước để thực hiện macro trong django theo cách khá mạnh mẽ, nếu bạn thực sự muốn macro check it out.

Theo lời khuyên, phần lớn thời gian bạn muốn làm với macro, bạn thực sự nên thực hiện với thẻ bao gồm, như đã đề cập; Tuy nhiên, đôi khi bạn chỉ thực sự muốn một vĩ mô và cho rằng bạn phải sử dụng một thư viện thẻ mẫu như tôi (đó là một trong số ít làm điều này cho django).

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