2012-06-11 12 views
43

Tôi có một mẫu rất cơ bản (basic_template.html), và muốn điền vào với dữ liệu định dạng sử dụng một mẫu phần. Basic_template.html có thể chứa nhiều thứ được định dạng bằng cách sử dụng mẫu từng phần.Làm cách nào để chèn mẫu vào mẫu khác?

Làm thế nào tôi nên cấu trúc mã trong views.py?

Lý do tôi đang làm điều này là sau này sẽ được lấp đầy bằng Ajax. Tôi làm đúng chứ hả?

Trả lời

88

Bạn có thể làm:

<div class="basic"> 
{% include "main/includes/subtemplate.html" %}  
</div> 

nơi subtemplate.html là một mẫu Django. Trong số subtemplate.html này, bạn có thể đặt HTML có thể thu được bằng Ajax.

Bạn cũng có thể bao gồm các mẫu nhiều lần:

<div class="basic"> 
{% for item in items %} 
    {% include "main/includes/subtemplate.html" %}  
{% endfor %} 
</div> 
+0

xin lỗi, quên đề cập đến: các subtemplate có thể khởi tạo nhiều lần vào basic_template.html – WindowsMaker

+0

Đó cũng là có thể, bạn có thể bao gồm một mẫu trong một cho vòng lặp trong mẫu, xem câu trả lời được cập nhật. –

+1

rực rỡ! cảm ơn bạn! – WindowsMaker

14

Bạn có thể làm điều này bằng cách sử dụng khối . Chặn là thẻ Mẫu Django sẽ ghi đè các phần của mẫu bạn mở rộng. Tôi đã bao gồm một ví dụ bên dưới.

basic_template.html

<body> 
{% block 'body' %} 
{% endblock %} 
</body> 

mẫu mà bạn muốn bao gồm: (ví dụ: example.html)

{% extends 'basic_template.html' %} 
{% block 'body' %} 
/* HTML goes here */ 
{% endblock %} 

views.py:

return render_to_response(template='example.html', context, context_instance) 

Việc làm này sẽ được tải basic_template.html, nhưng thay thế tất cả mọi thứ bên trong {% block 'body' %} {% endblock %} trong basic_template.html với bất cứ điều gì được chứa trong {% block 'body' %} {% endblock %}.

Bạn có thể đọc thêm về khối và mẫu thừa kế trong Django Docs

+0

Sự khác nhau giữa việc thực hiện điều này là gì cách và thực hiện {% bao gồm "main/includes/example.html"%}? –

+2

@MichaelLafayette, hãy nghĩ về việc mở rộng như kế thừa trong khi bao gồm nhập. – Mox

+0

Có bất kỳ lợi thế hiệu suất nào liên quan đến việc sử dụng một cách tiếp cận khác không? Phương thức '{% include" main/includes/example.html "%}' trông đơn giản hơn (nó xác nhận * KISS *). –