Vâng, nó quan trọng. Đầu tiên của tất cả các extends
chỉ có thể xảy ra như là dòng đầu tiên của tập tin. Thứ hai, include
đẩy và bật một đối tượng bối cảnh trên ngăn xếp giải quyết, có nghĩa là giá trị được tạo trong ngữ cảnh trong khi trong phần bao gồm sẽ nằm ngoài phạm vi khi nó trả về.
Quy tắc của tôi là: tạo base.html
tệp mẫu xác định cấu trúc tổng thể của trang web của bạn và sử dụng số tiền tự do là {% block foo %}
xung quanh các khu vực quan trọng. Sau đó, tất cả các mẫu khác của bạn extends
cơ sở (hoặc thứ gì đó tự mở rộng cơ sở) và bạn thay thế các khối đó nếu cần.
include
, mặt khác, là tốt cho việc đóng gói những thứ bạn có thể cần phải sử dụng ở nhiều nơi, thậm chí có thể trên cùng một trang.
Cập nhật:
Tôi đã được sử dụng thư viện riêng của tôi về template_tags
quá lâu mà tôi quên rằng ngôn ngữ mẫu Django vẫn có những khoảng trống lớn trong chức năng. Thẻ được đề cập ở đây là từ đoạn django đầu có tên là expr
mà tôi đã chỉnh sửa và mở rộng nhiều. Bạn có thể nói, ví dụ: {% expr 'Fred' as name %}
(hoặc bất kỳ biểu thức Python hợp lệ nào) và nó sẽ lưu trữ kết quả trong vị trí 'tên' trong ngữ cảnh hiện tại. Nếu điều này xảy ra trong mẫu included
, giá trị của name
sẽ xuất hiện khi thoát khỏi tệp mẫu.
Bạn có thể sắp xếp điều này bằng thẻ {% with %}
, nhưng expr
mang lại cho tôi sự linh hoạt hơn nhiều, bao gồm thực hiện các cuộc gọi phức tạp tùy ý. Điều này ban đầu xuất hiện khi phải tạo ra các đối tượng được lưu trữ phức tạp đòi hỏi các tương tác DBMS đắt tiền mà không thể thực hiện được trong khung nhìn, chúng phải được gọi trong chính khuôn mẫu đó.
Gửi email cho tôi (trong tiểu sử của tôi) nếu bạn cần hiểu rõ hơn về điều này.
Nguồn
2010-02-24 01:31:33
Bạn có thể giải thích điều này bằng ví dụ: 'giá trị được tạo trong ngữ cảnh trong khi bao gồm sẽ nằm ngoài phạm vi khi nó trả về' – Medorator