2010-12-31 38 views
41

Trong khi thiết lập dự án của tôi và làm việc để giữ cho các ứng dụng không phụ thuộc, tôi đã nhấn một snag. Tôi muốn tất cả các mẫu từ các ứng dụng khác nhau có đầu trang và chân trang nhất quán. Dưới đây là những gì tôi đang cố gắng:django bao gồm mẫu từ một ứng dụng khác

myproject/ 
     base/ 
      templates/ 
         header.html 
         footer.html 
     app1/ 
      templates/ 
         my_app1_page.html -> want to include 'header.html' 
              and 'footer.html' from base app 

Giả sử có nhiều ứng dụng khác cũng muốn thực hiện việc này. Điều này có thể và/hoặc đúng cách để làm điều đó không?

Trả lời

73

Chừng nào các ứng dụng là trong INSTALLED_APPS và mẫu loader cho các ứng dụng dirs được bật, bạn có thể bao gồm bất kỳ mẫu từ ứng dụng khác, ví dụ:

{% include "header.html" %} 

... từ các mẫu của bạn được đặt trực tiếp trong thư mục mẫu của ứng dụng của bạn. Nói chung, để tránh tên đụng độ nó là tốt hơn để sử dụng:

app1/ 
    templates/ 
     app1/ 
      page1.html 
      page2.html 
app2/ 
    templates/ 
     app2/ 
      page1.html 
      page2.html 

{% include "app1/page1.html" %} hoặc {% include "app2/page1.html" %} ...

Nhưng: để giữ một cái nhìn nhất quán và cảm nhận, nó là như vậy tốt hơn nhiều để sử dụng mẫu thừa kế thay vì bao gồm. Thừa kế mẫu là một trong số những điều thực sự tốt của hệ thống mẫu Django, chọn kế thừa bao gồm bất cứ khi nào nó có ý nghĩa (hầu hết thời gian).

khuyến nghị của tôi:

  • Có một mẫu cơ bản cho dự án của bạn ("base.html" là quy ước mặc định) với header và footer và {%block content%} cho nội dung chính của bạn.
  • Có mẫu khác của bạn kế thừa hình thức base.html {% extends "base.html" %} và ghi đè lên phần nội dung

Xem một phản ứng cho câu hỏi này cho các liên kết đến doc

+1

to và rõ ràng, đó là câu trả lời tôi đang tìm kiếm. – Scott

9

Trong khi bạn chắc chắn có thể làm điều đó bằng cách sử dụng include tag và chỉ định đường dẫn tuyệt đối, cách thích hợp để làm việc trong Django là sử dụng Template inheritance.

+1

1 mẫu thừa kế –

+0

gì nếu tôi có một số mô hình và một phần mẫu để hiển thị mô hình đó - ví dụ địa chỉ, sự kiện? Tôi nghĩ, sự bao gồm đó có ý nghĩa trong kịch bản như vậy. – quapka

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