使用 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 %}