在 Django 中,extends
是一个模板标签,用于创建模板继承关系。它允许您在一个基础模板中定义通用的布局和结构,然后在子模板中扩展或覆盖这些内容。这种模板继承的方式可以大大提高模板的可重用性和维护性。
语法和作用:
extends
标签的语法如下:
{% extends "base_template.html" %}
其中,"base_template.html" 是你希望子模板继承的基础模板的文件路径。当子模板被渲染时,它将首先查找这个基础模板,并将基础模板中的内容加载到子模板中。然后,子模板可以通过其他模板标签(如 block
标签)覆盖或扩展基础模板中的内容。
使用方法和使用场景:
-
创建基础模板 : 首先,您需要创建一个基础模板,该模板将包含通用的结构和布局,但是一些内容可能是动态的或需要在子模板中定制的部分,可以使用
block
标签来定义这些可变部分。base_template.html:
<!DOCTYPE html> <html> <head> <title>{% block title %}Default Title{% endblock %}</title> </head> <body> <div id="header"> <!-- Common header content --> </div> <div id="content"> {% block content %}{% endblock %} </div> <div id="footer"> <!-- Common footer content --> </div> </body> </html>
-
创建子模板: 接下来,您可以创建一个或多个子模板,这些子模板将继承基础模板并可以定制特定部分。
child_template.html:
{% extends "base_template.html" %} {% block title %} Custom Title - My Website {% endblock %} {% block content %} <h1>Welcome to my website!</h1> <p>This is a customized content for the home page.</p> {% endblock %}
在这个例子中,子模板
child_template.html
继承了base_template.html
,并且在title
和content
块中定义了定制的内容。
示例解释:
假设有一个 Django 视图将 child_template.html
渲染为响应:
from django.shortcuts import render
def home_view(request):
return render(request, 'child_template.html')
在这种情况下,当 home_view
视图被请求时,Django 将首先查找 child_template.html
,然后发现它继承自 base_template.html
,因此会加载 base_template.html
。然后,Django 将会检查 child_template.html
中的块,并将其插入到对应的 block
标签位置。
最终生成的 HTML 页面将类似于:
<!DOCTYPE html>
<html>
<head>
<title>Custom Title - My Website</title>
</head>
<body>
<div id="header">
<!-- Common header content -->
</div>
<div id="content">
<h1>Welcome to my website!</h1>
<p>This is a customized content for the home page.</p>
</div>
<div id="footer">
<!-- Common footer content -->
</div>
</body>
</html>
注意,在 child_template.html
中,我们定义了 block title
和 block content
的内容。这些内容将覆盖 base_template.html
中对应的 block
标签中的默认内容。
这样,您可以在基础模板中定义整个网站的通用布局,同时在子模板中根据需要进行定制,从而实现模板的重用和维护。