让我们一起走向未来
🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐
目录
- 让我们一起走向未来
- DTL模板 include
- 示例:
- 传递变量:
- 注意事项:
- DTL模板 block
- 基本语法:
- 示例:
- 父模板 (base.html)
- 子模板 (home.html)
- 解释:
- 嵌套使用 `block`:
- 示例:嵌套块
- 总结:
DTL模板 include
DTL (Django Template Language) 模板中的 include
标签用于将一个模板文件嵌入到当前模板中,从而实现代码复用和模块化。
基本语法如下:
{% include "模板路径" %}
示例:
假设你有一个 _header.html
文件,内容是网站的头部:
_header.html:
<header>
<h1>欢迎访问我的网站</h1>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about/">关于我们</a></li>
<li><a href="/contact/">联系我们</a></li>
</ul>
</nav>
</header>
然后,在主模板中可以使用 include
标签来包含这个头部模板:
index.html:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>我的网站</title>
</head>
<body>
{% include "_header.html" %}
<main>
<h2>欢迎来到首页</h2>
<p>这里是一些内容...</p>
</main>
</body>
</html>
这样,_header.html
的内容就会被插入到 index.html
中的 include
标签所在的位置。
传递变量:
如果你想将变量传递给被包含的模板,可以使用 with
语法。
_header.html:
<header>
<h1>{{ title }}</h1>
</header>
index.html:
{% include "_header.html" with title="我的主页" %}
这时,_header.html
中的 title
变量会被设置为 “我的主页”。
注意事项:
- 被包含的模板路径可以是相对路径或绝对路径,取决于你的模板目录结构。
-
include
语句会直接将包含的模板内容插入到当前位置,它不会返回一个 HTML 字符串。
使用 include
可以使模板更简洁,避免重复代码。
DTL模板 block
在 Django 模板语言 (DTL) 中,block
标签用于定义一个可供子模板覆盖的区域。block
允许父模板定义一个区域,子模板可以在该区域插入自定义内容。这个功能非常适用于模板继承的场景。
基本语法:
{% block block_name %}
默认内容
{% endblock %}
-
block_name
:这是块的名字,你可以在子模板中使用这个名字来覆盖这个块的内容。 - 默认内容:是当子模板没有覆盖这个块时,父模板显示的内容。
示例:
父模板 (base.html)
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>{% block title %}我的网站{% endblock %}</title>
</head>
<body>
<header>
<h1>欢迎来到我的网站</h1>
</header>
<main>
{% block content %}
<p>默认内容</p>
{% endblock %}
</main>
<footer>
<p>版权信息 © 2024</p>
</footer>
</body>
</html>
- 这里我们定义了两个
block
:
-
title
:允许子模板修改页面的标题。 -
content
:允许子模板修改页面的主体内容。
子模板 (home.html)
{% extends "base.html" %}
{% block title %}首页 - 我的网站{% endblock %}
{% block content %}
<h2>欢迎来到首页</h2>
<p>这里是网站的主要内容...</p>
{% endblock %}
-
extends
标签用来告诉 Django 当前模板是继承自base.html
。 - 在子模板中,我们使用
block
标签覆盖了父模板中的title
和content
块的内容。 - 如果子模板没有定义某个
block
,父模板中的默认内容会被使用。
解释:
- 当渲染
home.html
时,Django 会首先加载
base.html
,然后将
home.html
中定义的块插入到相应的位置:
-
title
块的内容会被替换为"首页 - 我的网站"
。 -
content
块的内容会被替换为指定的首页内容。
嵌套使用 block
:
你也可以在子模板中定义嵌套的 block
,或者在父模板中使用多个 block
进行更精细的控制。
示例:嵌套块
父模板 (base.html):
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>{% block title %}网站{% endblock %}</title>
</head>
<body>
<header>
<h1>网站头部</h1>
</header>
<main>
{% block content %}
<p>这是父模板的默认内容。</p>
{% endblock %}
</main>
<footer>
<p>版权所有 © 2024</p>
</footer>
</body>
</html>
子模板 (about.html):
{% extends "base.html" %}
{% block title %}关于我们{% endblock %}
{% block content %}
<h2>关于我们</h2>
<p>这里是关于我们的页面内容。</p>
{% block sub_content %}
<p>这是嵌套的内容。</p>
{% endblock %}
{% endblock %}
在这个例子中,about.html
继承了 base.html
,并且还在 content
块中定义了一个嵌套的 sub_content
块。如果你在 about.html
中不定义 sub_content
块,它会使用父模板中的默认内容(如果有定义的话)。
总结:
-
block
标签使得父模板和子模板之间的内容可以灵活覆盖,实现模板的复用和模块化。 - 子模板通过
block
覆盖父模板的指定区域,或者定义新的内容区域来添加或修改模板内容。