Django回顾【三】

目录

一、模板层

1、介绍

2、了解

3、页面静态化

4、模版语法

5、内置过滤器

6、标签

for标签

 if 标签

7、模板导入和继承

模板导入

模板继承


一、模板层

1、介绍

  • 模板在浏览器中是运行不了的 ----》因为它有模板语法  ----》浏览器解析不了模板语法
    • 必须在后端渲染完成(替换完成)  -----》变成纯粹的html,css,js
    • 这种在后端会被渲染的类python语法,它叫模板语法
      • django中它又叫dtl(django template language)

2、了解

python的模板:HTML代码+模板语法

def current_time(req):# ================================原始的视图函数# import datetime# now = datetime.datetime.now()# html = "<html><body>现在时刻:<h1>%s.</h1></body></html>" %now# ================================django模板修改的视图函数from django.template import Template,Contextnow = datetime.datetime.now()# 内部打开了这个模板 ---》读出所有内容,实例化得到了t对象t = Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')# t = get_template('current_datetime.html')c = Context({'current_date':str(now)})html = t.render(c)return HttpResponse(html)# 另一种写法(推荐)import datetimenow = datetime.datetime.now()return render(req, 'current_datetime.html', {'current_date':str(now)[:19]})

 总结:

render(request,'模板名字',context={key:value,key1:value})
本质是:
t=Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')
c=Context({'current_date':str(now)})
html=t.render(c) # 返回是字符串
HttpResponse(html)

3、页面静态化

  • 把什么页面,做成静态化的?----》访问量高的页面
  • 目的:提高项目并发量,响应速度和效率就高了
  • 把首页静态化
def index(request):
# 1 判断 cache文件夹下有没有index.html   纯静态页面
# 2 如果没有:做下面的事#     books = Book.object.all()#     t = Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')#     # t=get_template('current_datetime.html')#     c = Context({'books':books})#     html = t.render(c)# 保存到某个文件中  cache文件夹下 index.html 
# 3 如果有那个文件,打开文件 ---》HttpReponse
books=Book.object.all()
return render(request,'index.html',{books:books})

4、模版语法

变量:{{ 变量名 }}   字典,列表,对象  ----》 通过.拿到属性或方法

  • 字典:dic.name--->这不是python语法  ---->  dic['name']    dic.get('name')
  • 列表:list.2--->这不是python语法   ---->   list[0]
  • 对象:person.name ----> 是python语法
    • person.run ----> 不是python语法,会自动加括号,把run的返回值放在模板中  
    • person.run()不支持传参数
  1. 深度查询 用句点符
  2. 过滤器
  3. 标签:{{% % }} 

5、内置过滤器

<p>{{ now | date:"Y-m-d H:i:s" }}</p>
  • 注意:冒号后面不能加空格
{#如果变量为空,设置默认值,空数据,None,变量不存在,都适用#}
<p>{{ name |default:'数据为空' }}</p>
{#计算长度,只有一个参数#}
<p>{{ person_list |length }}</p>
{#计算文件大小#}
<p>{{ 1024 |filesizeformat }}</p>{#字符串切片,前闭后开,前面取到,后面取不到#}
<p>{{ 'hello world lqz' |slice:"2:-1" }}</p>
<p>{{ 'hello world lqz' |slice:"2:5" }}</p>{#截断字符,至少三个起步,因为会有三个省略号(传负数,1,2,3都是三个省略号)#}
<p>{{ '刘清政 world lqz' |truncatechars:"4" }}</p>
{#截断文字,以空格做区分,这个不算省略号#}
<p>{{ '刘清政   是      大帅比 谢谢' |truncatewords:"1" }}</p>{{s}}   不会渲染成标签,没有xss攻击
{#我们知道s是安全的,我们可以使用safe标签,把它渲染成真正的标签}
<p>{{ link1 }}</p>
<p>{{ link1|safe }}</p>
<p>{{ link }}</p><p>&spades;</p>
<p>{{ dot }}</p>{#add   可以加负数,传数字字符串都可以#}
<p>{{ "10"|add:"-2" }}</p>
<p>{{ li.1|add:"-2" }}</p>
<p>{{ li.1|add:2 }}</p>
<p>{{ li.1|add:"2" }}</p>
<p>{{ li.1|add:"-2e" }}</p>{#upper#}
<p>{{ name|upper }}</p>
<p>{{ 'LQZ'|lower }}</p>

6、标签

for标签

{% for person in person_list %}<p>{{ person.name }}</p>
{% endfor %}# 可以利用{% for obj in list reversed %}反向完成循环。

遍历一个字典:

{% for key,val in dic.items %}<p>{{ key }}:{{ val }}</p>
{% endfor %}

 for … empty

# for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for person in person_list %}<p>{{ person.name }}</p>{% empty %}<p>sorry,no person here</p>
{% endfor %}

 if 标签

# {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。{% if num > 100 or num < 0 %}<p>无效</p>
{% elif num > 80 and num < 100 %}<p>优秀</p>
{% else %}<p>凑活吧</p>
{% endif %}if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

7、模板导入和继承

模板导入

语法:{% include '模版名称' %}
<!--little.html  这个是以后要导入的代码块-->
<div><h1>我是广告</h1><p>亚洲最大交友平台</p><p>名字是:{{ name }}---诚信交友</p>
</div>
<!--在index.html 或者 login.html中想用-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title></head>
<body>
<div>{% include 'little.html' %}<!--这个位置引入即可,但是如果little中有模板语法,需要如下--> 
</div>
<hr>
<div>我是div222
</div></body>
</html>
# python代码:
def index(request):return render(request, 'index.html', {'name': '彭于晏'})

模板继承

Django模版引擎中最强大也是最复杂的部分就是模版继承了。模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

<!DOCTYPE html>
<html lang="en">
<head><link rel="stylesheet" href="style.css"/><title>{% block title %}My amazing site{% endblock %}</title>
</head><body>
<div id="sidebar">{% block sidebar %}<ul><li><a href="/">Home</a></li><li><a href="/blog/">Blog</a></li></ul>{% endblock %}
</div><div id="content">{% block content %}{% endblock %}
</div>
</body>
</html>

这个模版,我们把它叫作 base.html, 它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。

在这个例子中, block 标签定义了三个可以被子模版内容填充的block。 block 告诉模版引擎: 子模版可能会覆盖掉模版中的这些位置。

子模版可能看起来是这样的:

{% extends "base.html" %}{% block title %}My amazing blog{% endblock %}{% block content %}
{% for entry in blog_entries %}<h2>{{ entry.title }}</h2><p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

extends 标签是这里的关键。它告诉模版引擎,这个模版“继承”了另一个模版。当模版系统处理这个模版时,首先,它将定位父模版——在此例中,就是“base.html”。

那时,模版引擎将注意到 base.html 中的三个 block 标签,并用子模版中的内容来替换这些block。根据 blog_entries 的值,输出可能看起来是这样的:

<!DOCTYPE html>
<html lang="en">
<head><link rel="stylesheet" href="style.css" /><title>My amazing blog</title>
</head><body><div id="sidebar"><ul><li><a href="/">Home</a></li><li><a href="/blog/">Blog</a></li></ul></div><div id="content"><h2>Entry one</h2><p>This is my first entry.</p><h2>Entry two</h2><p>This is my second entry.</p></div>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv7+姿态估计Pose+tensort部署加速

YOLOv7-Pose 实现YOLOv7&#xff1a;可训练的免费套件为实时目标检测设置了最新技术标准 YOLOv7-Pose的姿态估计是基于YOLO-Pose的。关键点标签采用MS COCO 2017数据集。 训练 使用预训练模型yolov7-w6-person.pt进行训练。训练命令如下&#xff1a; python -m torch.distr…

Windows系列:Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传)

Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传) 安装环境安装步骤一. 安装补丁下面进入教程首先打开虚拟机,点击"虚拟机"选项中的"安装VMware Tools"点击确定如果出现下图中的问题,说明虚拟机中缺少更新程序,我们需…

企业真题(泛型、数据结构与集合源码)

二、企业真题 1. Java 的泛型是什么&#xff1f;有什么好处和优点&#xff1f;JDK 不同版本的泛型有什么区别&#xff1f;&#xff08;软*动力&#xff09; 泛型&#xff0c;是程序中出现的不确定的类型。 以集合来举例&#xff1a;把一个集合中的内容限制为一个特定的数据类…

Redis 安装

文章目录 第1关&#xff1a;Redis 安装第2关&#xff1a; Redis 启动 第1关&#xff1a;Redis 安装 编程要求 在右侧命令行中在线安装 Redis 服务器软件和客户端软件&#xff1a; 在线安装 Redis&#xff08;实验环境使用的是 Ubuntu 系统&#xff09;&#xff1b; 测试说明…

iptables——建立linux安全体系

目录 一. 安全技术类型 二. linux防火墙 1. 按保护范围划分&#xff1a; 2. 按实现方式划分&#xff1a; 3. 按网络协议划分&#xff1a; 4. 防火墙原理 三. 防火墙工具——iptables 1. netfilter 中五个勾子函数和报文流向 数据包传输过程&#xff1a; ① .五表四链…

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

通过增加虚拟内存来提高内存使用 本文解决的实际问题&#xff1a; 当我们物理内存小的时候&#xff0c;会出现OOM&#xff0c;然后服务自动死掉的情况。因为物理内存大小是固定的&#xff0c;有没有其他好的办法来解决呢&#xff1f;这里我们可以适当调整Linux的虚拟内存来协作…

互联网产品经理常用的ChatGPT通用提示词模板

产品规划和设计&#xff1a;请帮助我规划和设计一款互联网产品&#xff0c;包括市场调研、用户需求分析、产品功能设计、产品原型设计等方面的内容&#xff0c;以便我能够更好地满足用户需求并开发出优秀的产品。 产品开发和迭代&#xff1a;请帮助我进行互联网产品的开发和迭…

如何在 vue 项目中创建 svg 组件

在Vue项目中&#xff0c;SVG是一种非常常见的图像形式。与传统的矢量图像不同&#xff0c;SVG可以设置可缩放且清晰度高的图像形式。Vue使得使用SVG组件非常容易&#xff0c;本文将介绍如何在Vue项目中创建SVG组件。 步骤1&#xff1a;创建SVG文件 要创建SVG组件&#xff0c;…

更改Jupyter Notebook 默认存储路径

import osprint(os.path.abspath(.)) 然后打开cmd,输入&#xff1a; jupyter notebook --generate-config 按照路径在本地文件夹中找到那个文件。 然后找到"c.NotebookApp.notebook_dir"这条语句&#xff1a;&#xff08;直接通过"crtlf"输入关键字找阿 …

vue 使用decimal.js 解决小数相加合计精确度丢失问题

安装依赖 decimal.js npm install --save decimal.js 封装 在utils文件夹下创建decimal.js文件 import { Decimal } from decimal.js export function add (x, y) {if (!x) {x 0}if (!y) {y 0}const xx new Decimal(x)const yy new Decimal(y)return xx.plus(yy).toNumbe…

【哈希】1.两数之和

题目&#xff1a;https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map new HashMap<>();for (int i 0; i < nums.l…

mysql常见配置文件参数

1)mysql常用配置文件参数 MySQL的配置文件通常位于安装目录下的 my.cnf 或 my.ini 文件中。在Unix/Linux操作系统上&#xff0c;MySQL配置文件被命名为 my.cnf。在Windows操作系统上&#xff0c;MySQL配置文件被命名为 my.ini。 [mysqld] max_connections&#xff1a;该参数定…

JAVA-每一页PDF转图片

结论&#xff1a;1、iText几乎找不到如何PDF转图片的信息&#xff0c;但能找到获取到PDF里面的图片并保存下来的信息&#xff1b;2、PDF box满大街都是参考代码&#xff08;下面会附上一个作为参考&#xff09;&#xff1b;3、收费的库使用起来更简单&#xff0c;但就是要收费&…

微机原理——定时器学习1

目录 定时类型 8253内部结构框图 8253命令字 六种工作方式及输出波形 计数初值的计算与装入 8253的初始化 定时类型 可编程定时器8253&#xff1a;&#xff08;内部采用的是16位 减法计数器&#xff09; 8253内部结构框图 8253命令字 8253有三个命令字&#xff1a;方式命…

C++11 类的新功能

新的默认成员函数 C11在6个默认成员函数基础上又加了两个:移动构造函数和移动赋值函数 针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下&#xff1a; 小结&#xff1a; &#xff08;1&#xff09; 生成默认移动构造的条件比较严苛&#xff1a;必须是没有实现析…

Hdoop学习笔记(HDP)-Part.07 安装MySQL

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型的检测头去替换YOLOv8中的检测头。RT-DETR号称是打败YOLO的检测模型&#xff0c;其作为一种基于Transformer的检测方法&#xff0c;相较于传统的基于卷积的检测方法&#xff0c;提供了更为全面和深入的特征理解&#xff0c;将…

Java实现学生分数的最小差值

Java实现学生分数的最小差值 01 分类 数组 02 题目 给你一个 下标从 0 开始 的整数数组 nums &#xff0c;其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。 从数组中选出任意 k 名学生的分数&#xff0c;使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 …

【从删库到跑路 | MySQL总结篇】事务详细介绍

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、事务…

学习TypeScrip3(接口和对象类型)

对象的类型 在typescript中&#xff0c;我们定义对象的方式要用关键字interface&#xff08;接口&#xff09;&#xff0c;我的理解是使用interface来定义一种约束&#xff0c;让数据的结构满足约束的格式。定义方式如下&#xff1a; 使用接口约束的时候不能多一个属性也不能少…