模板繼承可以減少頁面內(nèi)容的重復(fù)定義骡楼,實現(xiàn)頁面內(nèi)容的重用
典型應(yīng)用:網(wǎng)站的頭部、尾部是一樣的秕磷,這些內(nèi)容可以定義在父模板中锈颗,子模板不需要重復(fù)定義
block標簽:在父模板中預(yù)留區(qū)域顷霹,在子模板中填充
extends繼承:繼承,寫在模板文件的第一行
定義父模板base.html
{ %block block_name%}
這里可以定義默認值
如果不定義默認值击吱,則表示空字符串
{ %endblock%}
- 定義子模板index.html
{ % extends "base.html" %}
- 在子模板中使用block填充預(yù)留區(qū)域
{ %block block_name%}
實際填充內(nèi)容
{ %endblock%}
注意的地方
- 如果在模版中使用extends標簽淋淀,它必須是模版中的第一個標簽
- 不能在一個模版中定義多個相同名字的block標簽
- 子模版不必定義全部父模版中的blocks,如果子模版沒有定義block覆醇,則使用了父模版中的默認值
- 如果發(fā)現(xiàn)在模板中大量的復(fù)制內(nèi)容绅喉,那就應(yīng)該把內(nèi)容移動到父模板中
- 使用可以獲取父模板中block的內(nèi)容
- 為了更好的可讀性,可以給endblock標簽一個名字
{ % block block_name %}
區(qū)域內(nèi)容
{ % endblock block_name %}
下面一個繼承的示例 : 模板部分
- base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% block head %}
{% endblock head %}
</head>
<body>
<h1>logo</h1>
<hr/>
{% block content %}
<h1>abc</h1>
{% endblock content %}
<hr/>
<h1>contact</h1>
</body>
</html>
- base_user.html
{% extends 'booktest/base.html' %}
{% block content %}
<table border="1">
<tr>
<td height="300">用戶導(dǎo)航</td>
<td>{% block user_content %}{% endblock user_content %}</td>
</tr>
</table>
{% endblock content %}
- user1.html
{% extends 'booktest/base_user.html' %}
{% block user_content %}
<h1>用戶中心1</h1>
{% endblock user_content %}
image.png