2012-02-12 29 views
18

Tôi không thể tìm ra cách sửa đổi các khối từ các mẫu được bao gồm bằng cách sử dụng Jinja2. Đây là một ví dụ mà tôi sử dụng ba tập tin.Thừa kế Jinja2 với các khối và bao gồm

base.html:

<html>{% include "content.html" %}</html> 

content.html:

<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 

story.html

{% extends "base.html" %} 
{% block title %}story.title{% endblock title %} 
{% block content_body %}story.description{% endblock content_body %} 

Khi render story.html, tôi sẽ nhận được:

<html> 
<h1>Title</h1> 
<div>Content Body</div> 
</html> 

Làm cách nào để hiển thị với các giá trị mong muốn?

+2

@ArminRonacher ở đâu khi bạn cần anh ấy - Tôi có cảm giác rằng điều này được gây ra bởi 'include 'content.html" 'ghi đè nội dung của các khối được đặt tên giống nhau trong' câu chuyện' mặc dù 'câu chuyện' đang ghi đè' cơ sở '- nhưng tôi không thấy bất cứ điều gì trong tài liệu để chỉ ra rằng điều này được mong đợi. –

Trả lời

5

Bạn nên xem macro trong Jinja2. Tôi nghĩ rằng điều này SO question có liên quan đến truy vấn của bạn.

12

base.html không được hiển thị vì nó không được gọi bởi bất kỳ mẫu nào. Những gì bạn có thể làm là mức thứ hai của phần mở rộng:

base.html:

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

content.html:

{% extends "base.html" %} 
{% block html %} 
<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 
{% endblock %} 

Tuy nhiên, đó có lẽ là quá mức cần thiết, bạn có thể sẽ tìm thấy rằng một mẫu cơ sở duy nhất là đủ (tức là kết hợp base.htmlcontent.html thành một mẫu duy nhất).

+0

đây là giải pháp thích hợp cho các mẫu kiểm tra mẫu django họ làm một điều tương tự để hiểu khái niệm. – Bedros

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