2013-02-06 37 views
26

Tôi có thể tạo mẫu cơ sở cho dự án của mình mà tất cả ứng dụng có thể vẽ không? Hoặc tôi có phải tạo mẫu cơ sở cho từng ứng dụng không? Và nếu tôi muốn chúng giống nhau, tôi chỉ sao chép chúng?Mẫu cơ sở dự án Django

Trả lời

50

Chắc chắn bạn có thể. Một ví dụ nhanh chóng của một base.html

<!DOCTYPE html> 
<html> 
    <head> 
     <title>My Project</title> 
    </head> 

    <body> 
    {% block content %}{% endblock content %} 
    </body> 
</html> 

Và nói rằng bạn có một ứng dụng gọi là myapp với một trang view.html,

{% extends "base.html" %} 

{% block content %} 
    <h2>Content for My App</h2> 
    <p>Stuff etc etc.</p> 
{% endblock content %} 

Hãy dành thời gian để read the docs để biết thêm thông tin

+6

Một điểm quan trọng mà nhiều người bỏ lỡ là '{% kéo dài xxx% } 'có thể lấy một tên tập tin chuỗi ký tự (ví dụ" base.html ") * hoặc * một biến để giải quyết thành tên tệp. Chúng tôi sử dụng điều này trong quá trình phát triển và thay đổi giá trị '{% extends base_template%}' khi đang di chuyển. Tất cả các mẫu chính (danh sách, chi tiết, tệp phẳng, v.v.) sử dụng đánh dấu rất chung/ngữ nghĩa và tất cả CSS/v.v. được định nghĩa trong tệp cơ sở cho mỗi chủ đề. Ví dụ. 'themes/blue.html' hoặc' themes/neon.html'. –

+7

Nó không phải là rất rõ ràng với tôi * nơi * các tập tin này phải đi. Tôi muốn mẫu cơ sở của tôi bên trong PROJECT_ROOT/templates/base.html, vì vậy nó có sẵn cho tất cả các ứng dụng. Nhưng bây giờ làm thế nào tôi có thể tham khảo nó, cho rằng tuyên bố 'mở rộng' sẽ tìm các mẫu bên trong PROJECT_ROOT/app-name/templates/...? – jlh

+0

@jlh: Nó làm việc cho tôi khi tôi đặt các mẫu của tôi trong PROJECT_ROOT/project-name/templates/base.html – Andreas

4

Có bạn hoàn toàn có thể làm điều đó. Bằng cách sử dụng các thẻ mẫu extendsinclude trong các mẫu Django của bạn.

Tôi bắt đầu tìm hiểu Django và gần đây đã tìm ra điều này. Mã của tôi là tại Github nếu bạn quan tâm đến việc xem xét như thế nào tôi cấu trúc Django mẫu để kế thừa từ một công cụ phổ biến base.html và sau đó include như navbar và header, footer, vv

4

Có một số vấn đề trong cuối cùng câu trả lời và đây là câu trả lời đúng; bạn phải có base.html như thế này:

{% load staticfiles %} 

<!DOCTYPE html> 
<html> 
<head> 
    <title>My Project</title> 
</head> 
<body> 
{% block content %}{% endblock %} 
</body> 
</html> 

và cũng cho index.html

{% extend "appname/base.html" %} 
{% block content %} 
    <h1>test</h1> 
{% endblock %} 
+0

Lỗi chính tả - phải là {% extends "appname/base.html"%} thay vì {% extend "appname /base.html "%} – niceguydave

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