使用 extends include 和 blocks
摘要
-
{%extends%} :這會將作為引數給出的模板宣告為當前模板的父級。用法:
{% extends 'parent_template.html' %}
。 -
{%block%} {%endblock%} :這用於定義模板中的部分,因此如果另一個模板擴充套件了這個部分,它將能夠替換其中編寫的任何 html 程式碼。塊由其名稱標識。用法:
{% block content %} <html_code> {% endblock %}
。 -
{%include%} :這將在當前模板中插入模板。請注意,包含的模板將接收請求的上下文,你也可以為其提供自定義變數。基本用法:
{% include 'template_name.html' %}
,變數用法:{% include 'template_name.html' with variable='value' variable2=8 %}
指南
假設你正在構建前端程式碼,併為所有程式碼提供通用佈局,並且你不希望為每個模板重複程式碼。Django 為你提供了內建標籤。
假設我們有一個部落格網站有 3 個共享相同佈局的模板:
project_directory
..
templates
front-page.html
blogs.html
blog-detail.html
1)定義 base.html
檔案,
<html>
<head>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
2)在 blog.html
中擴充套件它,就像,
{% extends 'base.html' %}
{% block content %}
# write your blog related code here
{% endblock %}
# None of the code written here will be added to the template
這裡我們擴充套件了基本佈局,因此它的 HTML 佈局現在可以在 blog.html
檔案中使用 .{ % block %}
的概念是模板繼承,它允許你構建一個基礎骨架模板,其中包含你站點的所有常見元素並定義該子塊模板可以覆蓋。
3)現在假設你的所有 3 個模板也有相同的 HTML div,它定義了一些流行的帖子。而不是被寫入 3 次建立一個新的模板 posts.html
。
blog.html
{% extends 'base.html' %}
{% block content %}
# write your blog related code here
{% include 'posts.html' %} # includes posts.html in blog.html file without passing any data
<!-- or -->
{% include 'posts.html' with posts=postdata %} # includes posts.html in blog.html file with passing posts data which is context of view function returns.
{% endblock %}