Django模板(编写html代码

1.模板

 

  • 用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器
  • 模版致力于表达外观,一个视图可以使用任意一个模板,一个模板可以供多个视图使用

 

  • 模板包含两部分
  • 静态部分,包含html、css、js
  • 动态部分,就是模板语言
  • Django处理模板分为两个阶段
  • 1.加载:根据给定的路径找到模板文件,编译后放在内存中
  • 2.渲染:使用上下文数据对模板插值并返回生成的字符串
  • 为了减少开发人员重复编写加载、渲染的代码,Django提供了简写函数render,用于调用模板

 

 

2.模板语言

 

变量:{{变量}}

  • 变量的作用是计算并输出
  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
  • 当模版引擎遇到如book.title,会按照下列顺序解析:
  • 1.字典book['title']
  • 2.先属性后方法,将book当作对象,查找属性title,如果没有再查找方法title()
  • 3.如果是格式为book.0则解析为列表book[0]
  • 如果变量不存在则插入空字符串''
  • 在模板中调用方法时不能传递参数

 

标签:{%代码段%}

  • for标签语法如下

{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环,从1开始
{%empty%}
列表为空或不存在时执行此逻辑
{%endfor%}

  • if标签语法如下

{%if ...%}
逻辑1
{%elif ...%}
逻辑2
{%else%}
逻辑3
{%endif%}

  • 比较运算符如下
  • 注意:运算符左右两侧不能紧挨变量或常量,必须有空格

==!=<><=>=

  • 布尔运算符andornot

 

 

过滤器

  • 语法:使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中
  • 如果过滤器需要参数,则使用冒号:传递参数

变量|过滤器:参数

  • 长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数
  • 默认值default,如果变量不存在时则返回默认值

data|default:'默认值'

  • 日期date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下
  • Y表示年,格式为4位,y表示两位的年
  • m表示月,格式为01,02,12等
  • j表示日,格式为1,2等
  • H表示时,24进制,h表示12进制的时
  • i表示分,为0-59
  • s表示秒,为0-59

value|date:"Ymj  His"

 

自定义过滤器

  • 过滤器就是python中的函数,注册后就可以在模板中当作过滤器使用

 

  • 1.在应用中创建templatetags目录,当前示例为”booktest/templatetags“,创建init文件,内容为空

 

  • 2.在”booktest/templatetags“目录下创建filters.py文件,代码如下

#coding=utf-8
#引入注册对象
from django.template import Library
register=Library()

#
使用装饰器进行注册
@register.filter
#定义求余函数mod,将value对2求余
def mod(value):
    return value%2

 

3.在templates/booktest/guolvqi.html中,使用自定义过滤器

  • 4.首先使用load标签引入模块:{%load filters%}

 

  • 过滤器可以接收参数,将booktest/templatetags/filters.py中增加mod_num函数

#使用装饰器进行注册
@register.filter
#定义求余函数mod_num,将value对num求余
def mod_num(value,num):
    return value%num

  • 说明:只能额外传递一个参数

 

注释

  • 在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端;html注释只能注释html内容,不能注释模板语言
  • 单行注释语法如下

{#...#}

  • 注释可以包含任何模版代码,有效的或者无效的都可以

{# { % if foo % }bar{ % else %} #}

  • 多行注释使用comment标签,语法如下

{%comment%}
...
{%endcomment%}

 

 

3.模板继承

  • 模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量
  • 典型应用:网站的头部、尾部信息

 

父模板

  • 如果发现在多个模板中复制一段代码,那就应该把这段内容定义到父模板中
  • 标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同
  • 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同
  • 父模板中也可以使用上下文中传递过来的数据

{%block 名称%}
预留区域,可以编写默认内容,也可以没有默认内容
{%endblock 
名称%}

子模板

  • 标签extends:继承,写在子模板文件的第一行

{% extends"父模板名称"%}

  • 子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值
  • 填充父模板中指定名称的预留区域

{%block 名称%}
实际填充内容
{{block.super}}用于获取父模板中block的内容
{%endblock 名称%}

 

 

4.HTML转义

  • 模板对上下文传递的字符串进行输出时,会对以下字符自动转义

小于号< 转换为&lt;
大于号> 转换为&gt

单引号' 转换为&#39;

双引号" 转换为 &quot;
与符号& 转换为 &amp;

  • 转义后标记代码不会被直接解释执行,而是被直接呈现,防止客户端通过嵌入js代码攻击网站

 

关闭转义

  • 过滤器escape可以实现对变量的html转义,默认模板就会转义,一般省略

{{t1|escape}}

  • 过滤器safe:禁用转义,告诉模板这个变量是安全的,可以解释执行

{{data|safe}}

 

  • 标签autoescape:设置一段代码都禁用转义,接受on、off参数

{%autoescapeoff%}
...
{%endautoescape%}

 

 

5.CSRF

  • CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
  • CSRF示意图如下


  • 如果想防止CSRF,首先是重要的信息传递都采用POST方式而不是GET方式,接下来就说POST请求的攻击方式以及在Django中的避免

 

  • 重要信息如金额、积分等,采用POST方式传递

防止CSRF两种方式:

  • 配置/settings.py中启用csrf中间件即可
  • 在form表单中加入标签csrf_token:{%csrf_token%}

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

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

相关文章

用户画像之Spark ML实现

用户画像之Spark ML实现 1 Spark ML简单介绍 Spark ML是面向DataFrame编程的。Spark的核心开发是基于RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;但是RDD&#xff0c;但是RDD的处理并不是非常灵活&#xff0c;如果要做一些结构化的处理&#xff0c;将RDD转换成…

EBS业务学习之应收管理

Oracle Receivable 是功能完备地应收款管理系统&#xff0c;它能够有效地管理客户、发票和收帐过程&#xff0c;因此是财务模块的重要组成部分&#xff0c;是财务系统中较为核心的模块之一。对于一个公司来说&#xff0c;是否能够与客户保持良好的跟踪&#xff0c;及时收取应收…

[Kaggle] Digit Recognizer 手写数字识别(神经网络)

文章目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址 相关博文&#xff1a; [Hands On ML] 3. 分类&#xff08;MNIST手写数字预测&#xff09; [Kaggle] Digit Recognizer 手写数字识别 1. baseline 导入包 import tensorflow as tf fr…

逻辑回归原理

逻辑回归原理 1 逻辑回归简介 logistic回归&#xff08;LR&#xff09;&#xff0c;是一种广义的线性回归分析模型&#xff0c;常用于数据挖掘&#xff0c;疾病预测&#xff0c;经济预测等方面。 优点&#xff1a;计算代价低&#xff0c;思路清晰易于理解和实现&#xff1b;…

Django中示例验证码的实现总结

验证码 在用户注册、登录页面&#xff0c;为了防止暴力请求&#xff0c;可以加入验证码功能&#xff0c;如果验证码错误&#xff0c;则不需要继续处理&#xff0c;可以减轻业务服务器、数据库服务器的压力。 1&#xff09;安装包Pillow3.4.1。 1pip install Pillow3.4.1点击查看…

java.lang.IllegalStateException: Not connected to server

在开发人际银行的时候 客户端smack老是出现如下错误: 12-09 13:00:37.115: E/AndroidRuntime(5221): FATAL EXCEPTION: Thread-1812-09 13:00:37.115: E/AndroidRuntime(5221): java.lang.IllegalStateException: Not connected to server.12-09 13:00:37.115: E/AndroidRuntim…

LeetCode 956. 最高的广告牌(DP)

文章目录1. 题目2. 解题1. 题目 你正在安装一个广告牌&#xff0c;并希望它高度最大。 这块广告牌将有两个钢制支架&#xff0c;两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。 举个例子&#xff0c;如果钢筋的长度为 1、2 和 3&#xff0c;则…

python面试题总结(一)字符串反转,写取指定数函数

1.请至少用一种方法下面字符串的反转&#xff1f; # 1.请至少用一种方法下面字符串的反转&#xff1f; s hello print() print(-a1-切片,简单的步长为-1, 即字符串的翻转(常用)-) #方法一&#xff1a;切片,简单的步长为-1, 即字符串的翻转(常用); a1s[::-1] print(a1)print() …

新闻发布系统登陆页

主要为前台设计&#xff0c;这真是一个细致活。另外用到圆角矩形制作&#xff0c;其实学会了也蛮简单的。 要学好后台对前台一定要有一定的了解并掌握一些相关知识。 以下为登录页代码&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeFil…

Tensorflow线程队列与IO操作

目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API&#xff1a; 3 图像读取 3.1 图像读取基本知识 3.2 图像基本操作 3.3 图像读取API 3.4 图片批处理流程 3.5 读取图片案例 …

Django其他(站点、列表、上传

1.静态文件&#xff1a; 项目中的CSS、图片、js都是静态文件 一般会将静态文件放到一个单独的目录中&#xff0c;以方便管理 在html页面中调用时&#xff0c;也需要指定静态文件的路径&#xff0c;Django中提供了一种解析的方式配置静态文件路径 静态文件可以放在项目根目录下…

LeetCode 1298. 你能从盒子里获得的最大糖果数(BFS)

文章目录1. 题目2. 解题1. 题目 给你 n 个盒子&#xff0c;每个盒子的格式为 [status, candies, keys, containedBoxes] &#xff0c;其中&#xff1a; - 状态字 status[i]&#xff1a;整数&#xff0c;如果 box[i] 是开的&#xff0c;那么是 1 &#xff0c;否则是 0 。 - 糖…

给javascript初学者的24条最佳实践

1.使用 代替 JavaScript 使用2种不同的等值运算符&#xff1a;|! 和 |!&#xff0c;在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值&#xff0c;返回true&#xff0c;!返回false。”——JavaScript&#xff1a;语言精粹 然而&#xff0c;当使用和&a…

Python面试题(二)列表去重,单例

1.Python里面如何实现tuple和list的转换python中&#xff0c;tuple和list均为内置类型&#xff0c; 以list作为参数将tuple类初始化&#xff0c;将返回tuple类型tuple([1,2,3]) #list转换为tuple以tuple作为参数将list类初始化&#xff0c;将返回list类型list((1,2,3)) #tuple转…

LeetCode 1614. 括号的最大嵌套深度

文章目录1. 题目2. 解题1. 题目 如果字符串满足一下条件之一&#xff0c;则可以称之为 有效括号字符串&#xff08;valid parentheses string&#xff0c;可以简写为 VPS&#xff09;&#xff1a; 字符串是一个空字符串 ""&#xff0c;或者是一个不为 "("…

[AngularJS]Chapter 1 AnjularJS简介

创建一个完美的Web应用程序是很令人激动的&#xff0c;但是构建这样应用的复杂度也是不可思议的。我们Angular团队的目标就是去减轻构建这样AJAX应用的复杂度。在谷歌我们经历过各种复杂的应用创建工作比如&#xff1a;GMail、Map和日历。我们认为我们有必要把这些经验总结下来…

Log4j框架配置文件

Log4j框架配置文件 1 Log4j的配置文件分类 Log4j支持两种配置文件格式&#xff1a;一中是以log4j.properties &#xff0c;另一种是 log4j.xml 2 Log4j的配置文件例子 ##自定义日志的输出级别log4j.rootLoggerWARN, stdout##自定义日志 log4j.logger.accessWARN, accesslog…

python面试总结(三)拷贝与通信

1.请写出下列结果&#xff1f;&#xff08;深拷贝与浅拷贝&#xff09; import copy a [1, 2, 3, 4, [a, b]] b a c copy.copy(a) d copy.deepcopy(a) a.append(5) a[4].append(c) print(a) print(b) print(c) print(d)# 答案如下&#xff1a; [1, 2, 3, 4, [a, b, c], 5] …

LeetCode 1615. 最大网络秩(出入度)

文章目录1. 题目2. 解题1. 题目 n 座城市和一些连接这些城市的道路 roads 共同组成一个基础设施网络。 每个 roads[i] [ai, bi] 都表示在城市 ai 和 bi 之间有一条双向道路。 两座不同城市构成的 城市对 的 网络秩 定义为&#xff1a;与这两座城市 直接 相连的道路总数。如果…

使用JSLint提高JS代码质量

随着富 Web 前端应用的出现&#xff0c;开发人员不得不重新审视并重视 JavaScript 语言的能力和使用&#xff0c;抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式。JavaScript 语言本身是一种弱类型脚本语言&#xff0c;具有相对于 C 或 Java 语言更为松散的限…