详解Python的Django框架中的模版继承

下面我将详细讲解 Python 的 Django 框架中的模版继承。

什么是 Django 模版继承?

在 Django 中,模版继承是一种重用模版代码的方法。它允许我们在不重复编写相同代码的情况下定义基本模板(通常是布局),并在子模板中继承这些基本模板。这使得模板更具可重用性和可维护性。

Django 模版继承的基本结构

一般来说,Django 模版继承具有以下基本结构:

{% extends “base.html” %}

{% block content %}

{% endblock %}

其中,{% extends %} 标签指定从哪个模板进行继承,并且被继承的模板是占位符的。在子模板中,{% block %} 标签用于定义占位符并允许子模板修改父模板并插入子模板特定的内容。

示例1

现在我们来看一个具体的示例。假设我们有一个基本模板 base.html,我们想要在该模板的内容区域插入子模板 child.html 的内容。我们可以这样做:

base.html:

<html>
<head>
    <title>{% block title %} {% endblock %}</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

child.html:

{% extends "base.html" %}

{% block title %}
    My Child Page
{% endblock %}

{% block content %}
    <h1>Welcome to My Child Page</h1>
{% endblock %}

在子模板中,我们使用 {% extends "base.html" %} 指定从 base.html 模板中继承。{% block title %} 定义了一个占位符,我们在子模板中可以重载它。同样,{% block content %} 也定义了一个占位符,我们使用这个占位符在子模板中插入特定的内容。最终,子模板中的内容将插入基本模板中的占位符对应位置,形成最终的输出页面。

示例2

现在,我们再来看一个稍微复杂一些的例子。假设我们有一个 Blog 网站,其中包含多个页面,并且我们希望所有页面都具有类似的外观和布局。我们可以使用 Django 的模版继承策略来实现这一目标。

base.html:

<html>
<head>
    <title>{% block title %}My Blog{% endblock %}</title>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>{{ blog_name }}</h1>
            <ul class="page-links">
                <li><a href="/">首页</a></li>
                <li><a href="/archive/">归档</a></li>
                <li><a href="/about/">关于</a></li>
            </ul>
        </div>
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

archive.html:

{% extends "base.html" %}

{% block title %}
    {{ blog_name }} - 归档
{% endblock %}

{% block content %}
    <ul class="post-list">
        {% for post in posts %}
            <li><a href="/post/{{ post.id }}">{{ post.title }}</a></li>
        {% endfor %}
    </ul>
{% endblock %}

about.html:

{% extends "base.html" %}

{% block title %}
    {{ blog_name }} - 关于
{% endblock %}

{% block content %}
    <p>这个站点专注于分享关于 Django 和 Python 的教程和资源。</p>
{% endblock %}

在这个例子中,我们定义了一个基本模板 base.html,用于呈现网站的头部和底部。各个页面可以直接继承基本模板,并可以使用 content 块插入具体的内容。其中,ul page-links 是我们在 base.html 中定义的导航栏,子模板可以对其进行修改。例如,在 about.html 中,我们只在 content 块中添加了一条关于站点的简短介绍,而修改了 title 块。

这个例子中,我们还使用了 Django 模板引擎的另外一个特性,变量渲染。在基本模板中,我们使用了变量 {{ blog_name }} 来动态渲染网站名称,并在子模板中使用了变量 {{ posts }},遍历所有 posts 并呈现一个带有超链接的文章列表。

总之,Django 模版继承是一种非常有用的技术,在减少代码重复和提高代码可维护性方面具有巨大优势。希望这篇文章能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python的Django框架中的模版继承 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django虚拟环境拷贝到另一台电脑,不能直接使用的问题

    最近折腾一个django的项目,想快速部署到服务器看看效果。virtualenv号称python三大神器之一,因此我打算把pycharm自动创建的虚拟环境直接拷贝到服务器运行代码。谁知出现了问题。   在pycharm上创建的虚拟环境是3.6.4 服务器环境上python3版本为3.6.9   按道理说,把本机的虚拟环境从本机拷贝到服务器,服务器就能直接运行…

    Django 2023年4月13日
    00
  • [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ-LQJ/p/5604331.html 现在步入正题,这篇文章是关于自有权限管理系统设计的思路描述,自有权限管理系统是抛弃django自带的后台管理界面,基于自己…

    2023年4月10日
    00
  • 【Django】QuerySet的分页和排序

    数据查询分页功能和排序功能大家都很熟悉,本文以一个小例子介绍一下Django后台实现 id依次从6到1 [ { “detail”: “this is test”, “CreateTime”: “2016-05-22 00:06:36”, “ModifyTime”: “2016-05-22 00:06:36”, “IsDelete”: “False”, “Ty…

    Django 2023年4月13日
    00
  • Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

    一、部署 Django 到远程 Linux 服务器 利用 xshell 通过 ssh 连接到 Linux服务器,常规的启动命令是 python3 manage.py runserver 0.0.0.0:80 但是,关闭 xshell 后,就访问不了 Django 了。 这时候需要使用 nohup 命令启动(概念:如果你正在运行一个进程,而且你觉得在退出帐户时…

    Django 2023年4月10日
    00
  • django 静态资源配置

    最近在学习一个项目,django框架,但当 render 模板时,模板里有引入的图片就访问不到, 这是因为 django部署方式比较特别,采用静态文件路径:STATICFILES_DIRS的部署方式,之前你写的相对路径,绝对路径因为缺少静态文件路径而全部失效 解决办法: 步骤1:在settings.py文件的最后加上以下内容: STATIC_URL = ‘/…

    Django 2023年4月11日
    00
  • Python – Django – simple_tag 和 inclusion_tag

    simple_tag 和自定义 filter 类似,但可以接收更多更灵活的参数 在 app01/templatetags/ 目录下创建 mysimple_tag.py mysimple_tag.py: from django import template register = template.Library() @register.simple_tag(…

    Django 2023年4月10日
    00
  • django发送邮件时报错 SMTPSenderRefused (501, b’Mail from address must be same as authorization user.’, ‘webmaster@localhost’) ,Connection unexpectedly closed

    原因没有开启 TLS 应设置 EMAIL_USE_TLS = True       #    QQ邮箱必须开启 开启后又报错:Connection unexpectedly closed 原因:端口号可能有问题,换端口号 EMAIL_PORT = 25       成功    完整设置如下: settings.py STATIC_URL = ‘/static…

    Django 2023年4月12日
    00
  • Django框架搭建的简易图书信息网站案例

    以下是关于“Django框架搭建的简易图书信息网站案例”的完整攻略,其中包含两个示例。 Django框架搭建的简易图书信息网站案例 Django是一个基于Python的Web框架,它可以帮助我们快速开发Web应用程序。本文将介绍如何使用Django框架搭建一个简易的图书信息网站。 实现步骤 实现一个简易的图书信息网站,需要遵循以下几个步骤: 创建Django…

    Django 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部