Django学习第二天:include、block_sqlite

让我们一起走向未来

🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐


Django学习第二天:include、block_django_02


目录

  • 让我们一起走向未来
  • DTL模板 include
  • 示例:
  • 传递变量:
  • 注意事项:
  • DTL模板 block
  • 基本语法:
  • 示例:
  • 父模板 (base.html)
  • 子模板 (home.html)
  • 解释:
  • 嵌套使用 `block`:
  • 示例:嵌套块
  • 总结:


Django学习第二天:include、block_django_03

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 变量会被设置为 “我的主页”。

注意事项:

  1. 被包含的模板路径可以是相对路径或绝对路径,取决于你的模板目录结构。
  2. include 语句会直接将包含的模板内容插入到当前位置,它不会返回一个 HTML 字符串。

使用 include 可以使模板更简洁,避免重复代码。

DTL模板 block

Django学习第二天:include、block_django_04

在 Django 模板语言 (DTL) 中,block 标签用于定义一个可供子模板覆盖的区域。block 允许父模板定义一个区域,子模板可以在该区域插入自定义内容。这个功能非常适用于模板继承的场景。

基本语法:

{% block block_name %}
    默认内容
{% endblock %}
  • block_name:这是块的名字,你可以在子模板中使用这个名字来覆盖这个块的内容。
  • 默认内容:是当子模板没有覆盖这个块时,父模板显示的内容。

示例:

父模板 (base.html)

Django学习第二天:include、block_学习_05

<!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)

Django学习第二天:include、block_django_06

{% extends "base.html" %}

{% block title %}首页 - 我的网站{% endblock %}

{% block content %}
    <h2>欢迎来到首页</h2>
    <p>这里是网站的主要内容...</p>
{% endblock %}
  • extends 标签用来告诉 Django 当前模板是继承自 base.html
  • 在子模板中,我们使用 block 标签覆盖了父模板中的 titlecontent 块的内容。
  • 如果子模板没有定义某个 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 块,它会使用父模板中的默认内容(如果有定义的话)。

Django学习第二天:include、block_html_07

总结:

  • block 标签使得父模板和子模板之间的内容可以灵活覆盖,实现模板的复用和模块化。
  • 子模板通过 block 覆盖父模板的指定区域,或者定义新的内容区域来添加或修改模板内容。