Django自学笔记 3-4 模板继承

【Python自学笔记】Django框架的自学笔记(内含Django常用命令/常用方法/防坑手册) 文章目录Django自学笔记MVT框架Django项目基础命令创建项目相关命令模型类相关命令通过模型类操作数据表的命令后台管理本地化创建管理员模型类(Models)注册模型类自定义管理界面视图相关命令(Views)视图函数urls配置模板(Templates)templates 设置使用模板文件给模板文件传递数据数据库配置 Django自学笔记 MVT框架 Django的MVT框架模式(MV... 阅读详情

————总目录——前言——框架版本————

======================= 大爽歌作,made by big shuang =======================

四、模板继承

在介绍具体的技术之前,先介绍在什么样的场景中,需要使用这样的技术,我觉得这对于新手理解起来很重要。
一般来说,要渲染一个页面我们就需要新建一个对应的模板,然而一个系统中,多个页面常常会有很多功能相似的内容区域,比如都有头部栏、侧边栏、底部信息栏等等,这样的内容区域是多个页面共有的,如果我们不思考采用新的技术方式,而是把在每个页面都写一遍这种共有内容的代码,不仅是代码重复的问题,而且会导致管理的混乱,比如要修改或者检查等等。
这里我们可以先想想python中是如何解决这个问题的,python代码会将公共使用的代码或者方法写在一个库(常常是一个py文件中),哪些py需要用到这部分内容则“导入”这部分内容。
html模板技术也是在解决这一问题,不过使用的是另一种思路,它会将共有的内容代码做成母版,那些要用到这个代码的则是子版,需要先继承母版,再编写子版对应的功能代码。这一点有点像幻灯片。

本文主要参考文档: template-inheritance

1 模板继承介绍

官方介绍如下:

模板继承是Django模板引擎中功能最强大的部分,也是最复杂的部分。
模板继承允许你构建一个基本的“骨架”模板,它包含你网站的所有公共元素,并定义子模板可以覆盖的块(即子模板可以自定义编辑的区域)。

2 “母版”

这里用我之前的代码(本章第一节展示过的)作为示例来讲解下模板继承
首先是background.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        学生选课管理系统
    </title>
</head>
<body>
<div class="main-container">
    <div class="main-header">
        <div class="main-title">学生选课管理系统</div>
        <div class="sub-title">Student Course Management System</div>
        {% block welcome_message %}
        {% endblock %}
    </div>
    <div class="login-container">
        {% block login_container %}
        {% endblock %}
    </div>
</div>
</body>
</html>

这个就是我们的母版。
官方文档一般称其为html骨架文档,习惯用base.html来命名,“子”模板的工作就是用内容填充骨架中的空块。
那么哪些是子模板可以填充的空块呢?
我们观察下上面和普通html语法格格不入的代码块,有两块:

{% block welcome_message %}
{% endblock %}
{% block login_container %}
{% endblock %}

这两块就是子模板可以进行填充的,即子模板可以自定义内容的。
其中block是块标记,所做的只是告诉模板引擎子模板可以覆盖模板的那些部分。
block后面接的一串字符串是这个块的名字,可以认为是一个辨识用的id,后面子模板会用这个id去标明自己要覆盖哪个。
endblock则是一个没有具体意义的结束符,用于标明block这个块到这里为止。

3 继承“母版”

母版初步介绍完了,接下来我们看看子版login_home.html

{% extends "user/background.html" %}
{% block login_container %}
<div class="login-kind student-login-button">
    <a href="">学生登录</a>
</div>
<div class="login-kind teacher-login-button">
    <a href="">教师登录</a>
</div>
{% endblock %}

其中第一行的extends标签是关键:它告诉模板引擎,这个模板“继承”另一个模板。
注:extends必须在第一行写。
当模板系统计算这个模板时,它首先定位父模板——在本例中是background.html。
然后,模板引擎将注意到background.html中的两个block块标记,并用子模板的对应block快内容替换这些块。
上面的例子中,login_home.html的值,输出可能如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        学生选课管理系统
    </title>
</head>
<body>
<div class="main-container">
    <div class="main-header">
        <div class="main-title">学生选课管理系统</div>
        <div class="sub-title">Student Course Management System</div>
    </div>
    <div class="login-container">
        <div class="login-kind student-login-button">
		    <a href="">学生登录</a>
		</div>
		<div class="login-kind teacher-login-button">
		    <a href="">教师登录</a>
		</div>
    </div>
</div>
</body>
</html>

注意,由于子模板没有定义welcome_message块,所以使用了父模板的值(在上面的例子中是一个空值)。父模板中{% block %}标记内的内容总是用作这样一种场景里的回退。

同时,在子模板中,也可以添加新的block块给下一级子模板使用,即子模板本身也可以作为一个母版。
实际中,可以根据需要使用任意多层的继承级别。

生产环境下oracle19c rac恢复节点2 现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。 阅读详情

相关推荐

手把手教你用OPA运放和MOS管搭建恒流源电路(附完整电路图)

本文详细介绍了如何使用OPA运放和MOS管搭建高精度恒流源电路,涵盖核心元器件选型、电路设计、工作原理及实际搭建步骤。通过负反馈控制机制和MOS管工作区设置技巧,实现稳定的电流输出,适用于LED驱动、电池充电等场景。附完整电路图和调试技巧,助您快速掌握恒流源设计。

weixin_29239279的博客 535

python 基础系列(七) — Python中的模块

python 基础系列(七) — Python中的模块 python基础系列索引 python 基础系列(一) — Python介绍 python 基础系列(二) — Python基本语法 python 基础系列(三) — Python中的变量进阶 python 基础系列(四) — Python中的面向对象 python 基础系列(五) — Python中的继承 python...

bencheng06的博客 468

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

python io模块怎么导入_Python3导入自定义模块的3种方式

一、同级目录下import MA.CoreMA.Core.PrintDes("Hello,World\n", 3)二、不同级目录或上级目录import syssys.path.append(r"..")import MB.NewCore这里的import包含的是上一级目录下的MB.NewCore文件项目中文件相互包含的方法,目录结构如下:Python----main.py----bxl.py---...

weixin_31260665的博客 716

Java8动态生成SFunction:基于字段名的Lambda表达式实践

本文深入探讨了在Java8中如何基于字段名动态生成SFunction,以解决MyBatis Plus的LambdaQueryWrapper在动态查询场景下的局限性。通过核心原理LambdaMetafactory的解析和手把手的代码实现,展示了如何将字符串字段名转换为类型安全的Lambda表达式,从而实现真正动态、类型安全的查询条件构建与通用数据处理,显著提升代码的灵活性与安全性。

sss66的博客 953

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

冒泡排序、选择排序、插入排序、快速排序、希尔排序

HK的博客 18万+

Python的八种数据导入方法,你全都知道吗?赶紧收藏!

数据分析过程中,需要对获取到的数据进行分析,往往第一步就是导入数据。导入数据有很多方式,不同的数据文件需要用到不同的导入方式,相同的文件也会有几种不同的导入方式。

python_first1的博客 1101

(十)安卓开发中的Activity之间的通信使用详解

下面将结合代码和具体在 Android 开发中,Activity 之间的通信是非常常见且核心的功能之一使用场景,详细讲解这几种方式。

cuijiying的博客 1280

python引入io_Python的高级特性,模块和IO操作

今天我们学习Python的高级特性、模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python。高级特性中会讲述列表生成式、生成器、和一些高级函数,学习这些方便我们快速的生成列表,节省我们使用Python的时间,更快的使用Python达成我们的目的。模块是我们调用包含函数和变量的文件,我们可以通过学习Python中的模块,明白如何使用和安装Python系统中的内置模块、自定义的...

weixin_31292729的博客 445

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7432

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 184

python引入io_Python异步IO实现全过程(2)

生成器中异步IO的起源之前,你看到了基于生成器的旧式风格的协程示例,虽然它已经被更为明确的原生协程所取代,但是还是值得回顾一下:可以实验一下,如果你只纯粹的调用py34_core()或者py35_core()而不使用await, 或者不调用asyncio.run()方法或其他高级函数,运行结果会怎样?单独调用一个协程会返回一个协程对象:这表面上看起来有些无趣,协程调用的结果...

weixin_33672838的博客 278

PINNACLE:PINN自适应配点与实验点选择算法

PINNACLE算法通过引入动态权重机制,实现了PINN训练点选择的自适应优化。该算法基于对训练过程中不同区域学习需求变化的深入理解,设计了平滑过渡的权重函数,确保了模型在不同训练阶段能够优先学习最需要的区域。理论分析和实验结果均表明,PINNACLE不仅能够保证收敛性,而且能够显著提高PINN的性能。这一算法为物理信息神经网络的应用提供了重要支持,尤其适用于复杂PDE问题的求解。

VectorShift的博客 1137

【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承

【自学笔记/Django/2】Django中模板、视图和url的关系及模板继承 备注: 1.自学Django中,打算将学习步骤记录下来,一来是个总结,二来方便以后查询。 2.本篇主要记录了完成Django的初始相关配置后,建立视图和模板以及配置路径 本篇是在上一篇【自学笔记/Django/1】Django新建与初始配置的基础上继续做的。 下面是基本的步骤: 建立模型models; 配置urls; 写视图views; 写模板html; 建立模型models 模型目前我自己基本已经设计好了,但是还没有跟

weixin_43338784的博客 383

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Django自学笔记 3-3 模板常用语法

————总目录——前言——框架版本———— ======================= 大爽歌作,made by big shuang ======================= 三、模板常用知识 1 常用Tags 调整url写法 <a href="/register/">register</a> 统一改为通过urls.py里面指定的urlpattern的name来访问 <a href="{% url 'register' %}">register</.

大爽老师的博客 554

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

<学习笔记>从零开始自学Python-之-web应用框架Django(三)Django模板

Django 模板是一些文本字符串,作用是把文档的表现与数据区分开。模板定义一些占位符和基本的逻辑(模 板标签),规定如何显示文档。通常,模板用于生成 HTML,不过 Django 模板可以生成任何基于文本的格式。

qq_41597915的博客 635

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【2014-08-18】Django自学笔记:模板

Django自学笔记,介绍Django模板引擎的使用,包括模板语法(变量、标签、过滤器)、模板继承(extends/block)、include标签、for/if模板标签以及Context对象渲染模板的完整示例。

cstriker1407的专栏 21

Django 使用模板

<a href="/">李老道自学网</a>

sterson的博客 409

Django4:模板(下)—自定义过滤器_django-filter 在django4(1)

有时候经常会在朋友圈、微博中可以看到一条信息发表的时间,并不是具体的时间,而是距离现在多久。比如刚刚,1分钟前等。这个功能DTL是没有内置这样的过滤器的,因此我们可以自定义一个这样的过滤器。

2401_84254555的博客 1030

Django2.0学习笔记_2:Django模板

我的dajngo2.0学习笔记Django模板渲染模板1. `render_to_string`2.`HttpResponse`模板查找路径:1. `DIRS`:2. `APP_DIRS`:3. 查找顺序:模板变量常用模板标签1. if标签2. for...in...标签:3. `for...in...empty`标签4. url标签模板常用过滤器:"date"过滤器date.html|格式字符|...

中文过六级再取名的博客 349

Django4:模板(下)—自定义过滤器_django-filter 在django4

虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。模版过滤器必须要放在app中,并且这个app必须要在INSTALLED_APPS中进行安装。然后再在这个app下面创建一个Python包叫做templatetags。再在这个包下面创建一个python文件。bookviews.pyurls.pymodels.py在创建了存储过滤器的文件后,接下来就是在这个文件中写过滤器了。

2401_84254555的博客 1020

从零开始的Django框架入门到实战教程(内含实战实例) - 03 前端模板嵌套、Django模板、Django组件(ModelForm)详解(学习笔记)

不同于之前的两篇,这篇主要的知识点是顺着项目实现串联的,主要是基于一个管理系统的小任务,包括部门管理和用户管理。再步骤上主要包括项目的准备工作、前端界面制作、Django模板嵌套、Django组件学习几部分。 1.准备工作 1.1. 创建项目和app 1.2. 项目设计 1.3. 数据库生成 1.4. 创建静态文件 2. 部门基本功能实现 2.1. 部门管理(无Form和ModelForm组件) 2.1.1. 前端壳子 2.1.2. 连接数据库 2.2. 新建部门 2.2.1. 前端壳子 2.2.2. 添加

如果没有躺赢的命,那就站起来奔跑,你的努力一定会对得起这一路的颠沛流离。 4656

Django自学笔记0-0 目录

本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 总目录 0-前言 —— 0-0 目录 —— 0-1 简介 —— 0-2 框架版本与相关工具 1 - 入门 —— 1-1 新建项目 —— 1-2 配置说明 —— 1-3 常用命令和常见问题 2 - URL与View —— 2-1 URL与View关系 —— 2-2 URL详细匹配规则 ...

大爽老师的博客 2258

Python自学20天:从零基础到Django博客开发实战

Python作为当下最流行的编程语言之一,以其简洁语法和丰富生态成为新手入门IT的首选。通过理解面向对象编程、装饰器等核心概念,结合Django框架的MVT设计模式,可以快速构建Web应用。在开发环境配置方面,WSL2与VS Code的组合提供了接近Linux原生的开发体验,而Git版本控制则保障了代码管理效率。这些技术特别适合博客系统、内容管理等CRUD应用的开发,本文通过20天自学案例,展示了如何从Python基础过渡到完整项目实战,其中Django框架的用户认证、ORM操作和Markdown集成等关键

weixin_33695082的博客 436

自学Django之路---Day4.View,路由规则,反向解析

知识点: locals()可以将局部变量以字典的方式打包 点语法 "."访问属性,之前已经多次用到了: {% for student in students %} <li> {{ student.s_name }} </li> {% endfor %} "."访问方法: 在Student类中定义一个方法: class Student(models.Model): s_name = models.CharField(

qq_39579087的博客 331

python自学必看的3本书,python自学完整教程

站在风口上,猪都能飞起来。人工智能风口,让Pyhon这门胶水语言转变成非常火的网红语言python作品展示。编程功力深厚的程序员花一两个星期就能上手Python,而一些新手程序员花几个月就可以上手。(文末送读者福利)学编程,用Python确实是一个相当不错的选择。不过,面对Python网上有纷杂的资料,一些程序员却不知道该怎么选择。学习Python没有章法,那么编程就无法建立体系,这就导致了一种现象:学了好长的一段时间感觉仍然只学了一个皮毛。

chatgpt002的博客 399
上一篇: Django自学笔记 2-3 视图(view)函数
下一篇: Django 小实例S1 简易学生选课管理系统 —— 五、实现注册功能
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值