【Python】【进阶篇】30、Django模板继承精讲

这篇具有很好参考价值的文章主要介绍了【Python】【进阶篇】30、Django模板继承精讲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

30、Django模板继承精讲

在本节我们讲述模板语言中最后一个知识点,也是最重要的,那就是模板继承。模板继承和 Python 语言中类的继承含义是一样的,在 Django 中模板只是一个文本文件,如 HTML,XML,CSV等文件格式。那模板继承到底是是什么呢?如何在 Django 中使用它呢?让我们一起一探究竟。

1. 模板继承的概念

模板继承是 Django 模板语言中最强大的部分。模板继承使你可以构建基本的“骨架”模板,将通用的功能或者属性写在基础模板中,也叫基类模板或者父模板。子模板可以继承父类模板,子模板继承后将自动拥有父类中的属性和方,我们还可以在子模板中对父模板进行重写,即重写父模板中方法或者属性,从而实现子模板的定制。模板继承大大提高了代码的可重用性,减轻开发人员的工作量。

2. 模板继承的应用

那么模板继承如何使用呢?它的使用场景有哪些呢?最典型的应用是 Web 站点的头部信息和尾部信息,比如 Web 站点的底部广告,每个网页都需要放底部广告,还有 Web 站点的头部导航栏,这些都可以使用模板继承来实现。

在模板继承中最常用了标签就是 {% block %} 与 {% extends %} 标签,其中 {% block% } 标签与 {% endblock %} 标签成对出现,而 {% extends %} 放在子模板的第一行且必须是模板中的第一个标签,标志着此模板继承自父模板,它们使用方法如下所示:

    #定义父模板可被重写内容
    {%block block_name%}
    ...可以被子模板覆盖的内容
    {%endblock block_name%}
    #继承父模板
    {% extends '父模板名称' %}
    #子模板重写父模板
    {%block block_name%}
    ...子模板覆盖后呈现的新内容
    {%endblock block_name%}

需要注意的是子模板不需要重写父模板中的所有 block 标签定义的内容,未重写时,子模板原封不动的使用父模板中的内容。下面我们通过一个简单的例子来看一下具体的实现过程。

首先在 index/templates/index 目录下定义父模板 base.html,代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Welcome to C语言中文网 {% endblock title %}</title>
    </head>
    <body>
    <!--区域1默认区域不可以被子模板修改-->
    <p>尊敬的用户您好:</p>
    <hr>
    <!--区域2可以被子模板重写-->
    {% block content %}
    <p>这是主体内容可以被子模板重写</p>
    {% endblock content %}
    <hr>
    <!--区域3可以被子模板重写-->
    {% block footer %}
    <p>这是结尾的内容也可以被重写</p>
    {% endblock footer %}
    </body>
    </html>

然后在父模板同级路径下定义子模板文件 test.html,代码如下所示:

    {% extends 'index/base.html' %}
    <!--重写title-->
    {% block title %} 欢迎你学习Django教程 {% endblock %}
    <!--区域1保持父模板默认状态-->
    <!--对父模板的区域2进行重写-->
    {% block content %}
    {% for item in course %}
    <li>{{ item }}</li>
    {% endfor %}
    {% endblock content %}
    {% block footer %}<p>最后希望<span style="color:red">{{ name }}</span>在C语言中文网学习可以学有所成</p>
    {% endblock footer %}

在 index/views.py 文件编写视图函数,如下所示:

    #定义父模板视图函数
    def base_html(request):
        return render(request,'index/base.html')
    #定义子模板视图函数
    def index_html(request):
        name='xiaoming'
        course=['python','django','flask']
        return render(request,'index/test.html',locals())

我们在主路由使用 include 函数为 index 应用建立对应的分发式路由列表,操作步骤如下所示,首先在主路由列表关联 index 应用

    from django.urls import path,include
    from BookStore import views
    urlpatterns = [path('index/',include('index.urls'))]

然后在 index 应用目录下新建 urls.py 文件,建立主路由对应的分发式路由,代码如下所示:

    from django.urls import path
    from index import views
    urlpatterns=[
    #127.0.0.1:8000/index/test 访问子模板
    path('test/',views.index_html),
    #127.0.0.1:8000/index/base 访问父模板
    path('base/',views.base_html)]

在浏览器地址栏输入父模板 url 地址进行访问,得到的结果如下所示:

【Python】【进阶篇】30、Django模板继承精讲

图1:模板继承父模板

我们在父模板中标记了哪些区域可以被子模板重写覆盖,现在我们访问子模板地址,看看它又是如何的呢?展示结果如下所示:

【Python】【进阶篇】30、Django模板继承精讲

图2:模板继承子模板

我们可以看出,子模板对父模板中 {% block %} 包含的内容进行了重写覆盖,这就是模板继承应用。如果在多个模板中出现了大量复杂的代码,那么就应该考虑使用模板继承来减少重复性代码。

3. 父模板内容扩展(block.super)

所谓父模板内容扩展,即对父模板中的 block 包含内容进行添加,而并非替换。Django 为实现这一功能需求提供了 {{ block.super }}
变量,可以获取到父模板中渲染后的结果并对父模板内容进行添加,我们通过举例说明实现方法,在 base.html 中添加如下代码:

    {% block test %}
    测试模板继承:
    {% endblock test %}

最后在 test.html 文件中插入如下代码:

    {% block test %}
    {{block.super}}"block.super"实现父模板内容添加
    {% endblock %}

视图层函数保持不变。访问 127.0.0.1:8000/index/test,结果如下:

【Python】【进阶篇】30、Django模板继承精讲

图3:block.super变量使用

4. 总结归纳

本节介绍了模板继承的使用,以及它的优势,Django 官网建议,在父模板中应尽量多的使用 {% block %}
标签,这样可以给我们更多的选择空间。本节知识点总结如下:文章来源地址https://www.toymoban.com/news/detail-442577.html

  • block 标签需要成对出现,使用 {{ endblock }} 作为结束标签;
  • 定义 block 标签名字,子模板中具有同样名称的 block 块完成对父模板的替换;
  • 子模板不需要定义父模板中的所有 block,未定义时,子模板将原样使用父模板中的内容;
  • 子模板需要使用 {% extends %} 标签继承父模板,且必须是模板中的第一个标签,并放在文件的第一行;
  • 子模板不覆盖父模板而是对父模板内容进行添加,此时使用 {{ block.super }} 变量来获取父模板 block 块的内容。

到了这里,关于【Python】【进阶篇】30、Django模板继承精讲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python框架【模板继承 、继承模板实战、类视图 、类视图的好处 、类视图使用场景、基于调度方法的类视图】(四)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月11日
    浏览(41)
  • Python框架【模板继承、继承模板实战、装饰器、蓝图(介绍、单文件、目录结构、模版文件、静态文件 url_for函数子域名实现)】(五)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月10日
    浏览(35)
  • 【C# 基础精讲】继承、封装、多态

    继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)是面向对象编程中的三大核心概念,它们构成了面向对象编程的基础,有助于创建更加模块化、可扩展和可维护的代码。这三个概念在C#及其他面向对象编程语言中广泛应用,本文将详细解释这三个概念的含义、特点

    2024年02月12日
    浏览(28)
  • 【Python从入门到进阶】30、JSONPath的介绍和使用

    接上篇《29、xpath抓取站长素材图片》 上一篇我们讲解了如何利用xpath来抓取站长素材网站的图片区首页的所有图片,本篇我们来介绍JSONPath的基础和具体使用。 1、什么是JSONPath? JSONPath是一种用于在JSON(JavaScript Object Notation)数据中定位和提取特定元素的查询语言。它类似于

    2024年01月22日
    浏览(30)
  • Python|30行代码实现微博热榜爬虫(及可视化进阶)

    当你想要跟踪微博的热门话题时,通过编写一个Python爬虫,来获取微博热搜榜单上的实时数据,并将其可视化展示出来,通过邮件或QQ机器人将其推送,亦可以将其存档,用以保留不同时期的舆论热点。 此外,排行榜项目一向是学习Python爬虫时必备的练手项目,通过本项目,

    2024年02月05日
    浏览(31)
  • Python web实战之 Django 的模板语言详解

    Python、web开发、Django、模板语言     作为 Python Web 开发的框架之一,Django 提供了一套完整的 MVC 模式,其中的模板语言为开发者提供了强大的渲染和控制前端的能力。本文介绍 Django 的模板语言。   Django 的模板语言是一种基于 HTML 的模板语言,它提供了丰富的标签和过滤器

    2024年02月14日
    浏览(35)
  • 【Python】【进阶篇】1、Django是什么?

    Django 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。由于 Python 语言的跨平台性,所以 Django 同样支持 Windows、Linux 和 Mac 系统。 在 Python 语言炽手可热的当下,Django 也迅速的崛起,在 Web 开发领域占有一席之地。基于 Python 开发的框架除了 Django 外,还有可以实现

    2023年04月23日
    浏览(36)
  • Python进阶篇(一)-- Django快速上手

            Web框架,就是用于开发Web服务器端应用的基础设施,说得通俗一点就是一系列封装好的模块和工具。事实上,即便没有Web框架,我们仍然可以通过socket或CGI来开发Web服务器端应用,但是这样做的成本和代价在商业项目中通常是不能接受的。通过Web框架,我们可以化

    2024年02月01日
    浏览(44)
  • 【Python】【进阶篇】14、Django创建第一个项目

    在上一章中,我们完成了开发环境的搭建工作。 本章我们将学习如何创建 Django 项目以及 Django 项目的初始化,我们将创建一个名为 BookStore 的 Django 项目,用此项目来讲解 Django 框架的部分知识,通过这个项目我们将一起打开 Django 世界的大门。 1) BookStore项目创建 我们创建一

    2024年02月02日
    浏览(35)
  • 【Python】【进阶篇】24、Django if标签详解

    本节继续讲解 Django 的模板语言,Django 内置了许多标签用于简化模板的开发过程,同时 Django 也支持自定义标签,这极大的方便了 Web开发者,下面我们依次进行介绍。 Django 的模板系统对标签的解释是在渲染的过程中提供相应的逻辑,比如Python 语言中 if…else 语句、with 语句、

    2024年02月03日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包