Tôi đang tự hỏi nếu có ai biết làm thế nào để đối phó với những điều sau kỳ quặc mẫu cấu trúc:Django mẫu: khối trọng của trẻ em bao gồm các mẫu thông qua một mẫu mở rộng
### base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title> {% block title %} Title of the page {% endblock %} </title>
</head>
<body>
<header>
{% block header %}
{% include "base/header.html" %}
{% endblock header %}
</header>
{% block content %}{% endblock %}
</body>
</html>
### base/header.html
<div id="menu-bar">
{% block nav %}
{% include "base/nav.html" %}
{% endblock %}
</div>
### base/nav.html
<nav id="menu">
<ul>
<li>
<a href="/profile/">My Profile</a>
</li>
<li>
<a href="/favs/">My Favorites</a>
</li>
{% block extra-content %}{% endblock %}
</ul>
</nav>
Và, trọng tâm của vấn đề:
### app/somepage.html
{% extends "base.html" %}
{% block content %}
<p>Content is overridden!</p>
{% endblock %}
{% block extra-content %}
<p>This will not show up, though...</p>
{% endblock %}
{% block nav %}
<p>Not even this.</p>
{% endblock %}
Vấn đề là khi mở rộng mẫu, bạn chỉ có thể ghi đè các khối được khai báo trong phụ huynh chứ không phải bất kỳ phần tử nào.
Tôi cho rằng tôi có thể tạo base.html một khối các khối lồng nhau không được sử dụng bao gồm tất cả các dự phòng trong tương lai, nhưng thậm chí có thể ghi đè đúng cách không? Và đó là cách duy nhất?
Nếu bạn đang tự hỏi tại sao tôi có một luồng công việc bao gồm/mở rộng xung quanh base.html, tôi có nhiều mẫu phụ mà tôi muốn sử dụng trong toàn bộ dự án: Tiêu đề, chân trang, nav, sidebars, vv Tất cả chúng sẽ được cấu trúc nhất quán trên toàn bộ trang web, nhưng trong nhiều trường hợp, toàn bộ phân khu của trang web sẽ chỉ cần một vài trong số các mẫu con đó. Ý tưởng của tôi là xác định các mẫu con trong thư mục templates/base và có các mẫu/base-type1.html, templates/base-type2.html, vv để mở rộng ở các vị trí khác. Mỗi loại sẽ chỉ tham chiếu các mẫu phụ cần thiết và ghi đè lên chúng để đặt nội dung khi cần.
Vâng, sau khi công bố tôi xem [câu hỏi này] (http://stackoverflow.com/questions/9034331/overwriting-a-block-within-an- bao gồm-mẫu-từ-một-mở rộng-mẫu) bật lên trong thanh bên, ngay cả sau khi tìm kiếm kỹ lưỡng tràn ngăn xếp và googling. Tôi hiểu cơ chế của giới hạn này trong django, nhưng con người, những tác động đang gây thất vọng. –
Hoàn toàn cố gắng để đăng bài này như là một câu trả lời, nhưng tài khoản stack mới của tôi thiếu đại diện ... Quên về điều đó. –
Đối với người tìm kiếm trong tương lai: [câu hỏi nói trên] (http://stackoverflow.com/questions/9034331/overwriting-a-block-within-an-included-template-from-an-extended-template) có mẫu mã cơ bản một vài câu trả lời cho thấy chiến lược hữu ích của Marcin. –