2013-01-08 29 views

Trả lời

11

Chúng phục vụ các mục đích khác nhau. Thẻ include chỉ bao gồm toàn bộ nội dung từ một mẫu hiện có và chưa sửa đổi. Thẻ bao gồm tùy chỉnh chuyển ngữ cảnh đến một hàm có thể chứa logic để thao tác ngữ cảnh trước khi chuyển nó vào mẫu.

Ví dụ: có lẽ tôi có một bảng điều khiển sẽ được hiển thị trên nhiều trang. Mẫu của bảng điều khiển yêu cầu một vài truy vấn cụ thể được chuyển tới nó thông qua ngữ cảnh. Các trang có chứa bảng điều khiển không yêu cầu các biến ngữ cảnh đó cho bất kỳ thứ gì khác. Nếu tôi bao gồm mẫu bảng điều khiển với thẻ include, tôi sẽ phải viết các truy vấn đó trong mỗi chế độ xem chứa bảng điều khiển và chuyển chúng dưới dạng biến ngữ cảnh.

Cách khác, tôi có thể viết thẻ bao gồm tùy chỉnh chứa các truy vấn và chuyển chúng vào mẫu của bảng điều khiển. Bằng cách sử dụng thẻ bao gồm tùy chỉnh, tôi sẽ không cần phải lặp lại mã để tạo ngữ cảnh của nó trong mỗi chế độ xem có chứa bảng điều khiển. Quan điểm của tôi sẽ chứa ít mã hơn và ít lộn xộn hơn với các biến ngữ cảnh chỉ được sử dụng bởi bảng điều khiển.

Mặc dù bạn chính xác theo nghĩa là thẻ bao gồm tùy chỉnh chỉ đơn giản chuyển vào ngữ cảnh không được quản lý sẽ giống như thẻ include.

+0

Điểm tuyệt vời. Tôi tự hỏi làm thế nào họ so sánh hiệu suất-khôn ngoan. – Wtower

4

Cần tách các mẫu thành các tệp nhỏ hơn? Sử dụng bao gồm thẻ (để dễ đọc và bảo trì và DRY)

Cần bao gồm thêm mã trước khi hiển thị mẫu? Sử dụng thẻ bao gồm (tìm nạp thêm dữ liệu, thêm một số logic nghiệp vụ .. nó thực sự giống như một dạng xem ít url khác. Nó giống như một hàm mẫu).

0

Về nguyên tắc, điểm được thực hiện bởi câu trả lời của dgel và YardenST là chính xác. Ngoài ra, một cái nhìn vào mã django cho một cái nhìn sâu sắc về cách hai tùy chọn được so sánh trong hiệu suất.

Khi sử dụng default template loaders, hoàn toàn không có sự khác biệt giữa hai loại. Cả hai cuối cùng thực hiện một cuộc gọi đến các chức năng InclusionTagrender(), do đó làm cho một cuộc gọi đến mẫu Loaderget_contents() mở tệp mẫu từ hệ thống tệp. render() chỉ lưu trữ tệp trong trường hợp tệp được sử dụng trong mẫu cho vòng lặp.

Một lưu ý phụ, có thể có sự khác biệt về hiệu suất bằng cách sử dụng django.template.loaders.cached.Loader.

Cuối cùng, liên quan đến đề xuất của dgel để sử dụng thẻ bao gồm cho bối cảnh chung trên các chế độ xem khác nhau: có thể tránh được thêm chi phí nhỏ khi kết xuất mẫu, khi đánh dấu html nằm trong một mẫu cơ sở duy nhất kéo dài trên nhiều chế độ xem, bằng cách sử dụng ContextMixin. Đây là một kịch bản khá phổ biến để hiển thị ví dụ. một menu chính trong một mẫu cơ sở.

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