django的模板语言:DTL

模板语言的变量传入

这个是标签 {{ 变量名 }}

{{ 变量名 }}   #模板语言的替换可以在模板中的任意位置生效

PS:通过 可以做深度查询

模板语言的过滤器   #add就是一个过滤器

{ 变量名 | add:number}  #number就是数字,相当于把变量加数字,-number就是减法

PS:模板中不支持变量的运算,所以用过滤器可以做到运算的效果

python中的变量传入模板中

模板语言的替换:把python中的变量替换到模板中的指定位置

urls.py   #app下的

from django.conf.urls import url,include  #include就是用来做路由分发的
from django.contrib import admin from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'index/',views.index)
]

new_index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板语言</title>
</head>
<body>
{{ time }}
</body>
</html>

views.py   #app下的views

from django.shortcuts import render,HttpResponse,redirect,reverse
import time def index(request):
ctime = time.time()
# 第三个参数是一个字典
return render(request,'new_index.html',{'time':ctime})

将多种python类型的数据传入模板中

PS:原理就是python变量的名字是什么,在模板中直接用模板语言的格式{{ 变量名 }} 直接可以获取

模板语言之变量的导入和处理

views.py   #app下的

from django.shortcuts import render,HttpResponse,redirect,reverse
import time,datetime class Peroson():
def __init__(self,name):
self.name = name def index(request):
ctime = time.time() dic = {'name':'lqz','age':19} li = [1,2,3,4,5] def test():
return '我是个函数' lqz = Peroson('lqz') count = 10 b = True counts = 1024 # dat是一个时间类型的对象
dat = datetime.datetime.now() # 格式化时间赋值给变量
dates = dat.strftime('%Y-%m-%d') # 在视图内写html的一些标签样式等,要在页面中渲染出来得通过页html中的内置过滤器 safe来实现
ss='<input type="text" name="name">' # locals() 会把该函数中所有的变量,构造成字典传到模板中
return render(request,'new_index.html',locals())

uels.py   #总路由

from django.conf.urls import url,include  #include就是用来做路由分发的
from django.contrib import admin from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'index/',views.index)
]

new_index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板语言</title>
</head>
<body>
<input type="text" name="name">
<h1>模板语言之变量的导入和处理</h1>
<p>{{ ctime }}</p>
<p>{{ li }}</p>
<p>{{ dic }}</p>
{#取出字典中的值,是用 . \python中的是[]#}
<p>{{ dic.name }}</p>
<p>{{ dic.age }}</p>
{#列表取值#}
<p>{{ li.1 }}</p>
{#也可以传入函数,但是不能加()#}
<p>{{ test }}</p>
{#传入一个对象#}
<p>{{ lqz.name }}</p>
{#add就是内置过滤器#}
<p>{{ count | add:10 }}</p>
{#default内置过滤器 就是当传入的变量是False的时候显示后面设定的字符,如果是True的时候就是显示True#}
<p>{{ b | default:'当b是False的时候显示这个默认值' }}</p>
{#length 内置过滤器,计算变量的长度#}
<p>{{ dic | length }}</p>
{#filesizeformat 内置过滤器,将变量的值根据长度自动进行一个单位换算,不同长度显示不同的单位,kb\mb\tb#}
<p>{{ counts | filesizeformat }}</p>
{#date内置过滤器,将python中的时间对象变成自己设定的类型在页面中显示,date后面格式一定是一个字符串形式#}
{#y对应年,m对应月,d对应日#}
<p>{{ dat | date:'Y年-m月-d日 H:i:s' }}</p>
{#在python中将时间处理成指定格式后返回,可以不用过滤器#}
<p>{{ dates }}</p>
{# safe 就是将视图中的变量值原封不动的在页面中显示 #}
<p>{{ ss | safe }}</p>
</body>
</html>

xss攻击

就是前端的一种攻击方式,叫跨站脚本攻击,比如提交数据的时候提交了一个heml可执行的代码存入数据库,在提交的时候是以字符串形式,然后访问页面的时候从数据库内将这个字符串取出,由于是一串可执行代码,前端用safe处理后直接执行了代码,很有可能造成系统的奔溃或者严重的问题

xss攻击简单模拟

views.py

from django.shortcuts import render,HttpResponse,redirect,reverse
import time,datetime def index(request):
# 变量的值是一个html可执行的语句
ss="<script>alert('xss攻击')</script>"
return render(request,'new_index.html',locals())

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板语言</title>
</head>
<body>
<h1>xss攻击模拟</h1>
{#如果这里用safe将变量的值原封不动的传入,则会造成xss攻击#}
<p>{{ ss | safe }}</p>
</body>
</html>

PS:django中已经帮我们处理了xss攻击,只要不用safe,则永远是以字符的形式显示到页面中,只有我们觉得这个是安全的才用safe

(9)模板层 - templates(模板语言、语法、取值、过滤器、变量的使用)的更多相关文章

  1. Django框架(七)-- 模板层:模板导入、模板继承、静态文件

    一.模板导入 要复用一个组件,可以将该组件写在一个文件中,在使用的时候导入即可 在模板中使用 1.语法 {% include '模板名字' %} 2.使用 ad.html页面 <div clas ...

  2. Django框架(八)—— 模板层:模板导入、模板继承、静态文件

    目录 模板导入.继承.静态文件 一.模板导入 1.语法 2.使用 二.模板的继承 1.使用模板的继承 2.强调(注意点) 三.静态文件 1.在配置文件settings中配置过静态文件 2.导入使用静态 ...

  3. C语言数据类型取值范围

    一.获取数据类型在系统中的位数 在不同的系统中,数据类型的字节数(bytes)不同,位数(bits)也有所不同,那么对应的取值范围也就有了很大的不同,那我们怎么知道你当前的系统中C语言的某个数据类型的 ...

  4. Data层相关问题 & JS循环取值

    第一次写博客,里面是自己工作中碰到的问题及总结的知识点,便于自己以后回顾,技术大牛们请直接忽略这篇文章,也希望能帮助到想我这样的小白! Data层相关问题总结: 1. 代码管理用的是 VSS 2005 ...

  5. C语言数据类型取值范围解析

    版权声明:本文为博主原创文章,未经博主允许不得转载.   为什么int类型的取值范围会是-2^31 ~ 2^31-1  ,为什么要减一呢? 计算机里规定,8位二进制为一个字节,拿byte来说,一个BY ...

  6. C语言函数返回值和变量类型

    前言 最近在刷题,在写矩阵的快速幂的题时,对于返回值是数组的程序,写的十分冗杂.借此机会,重新梳理下C语言中函数的返回值与变量类型的关系. 按照变量的寿命,可以分为三种类型 1.静态变量 寿命从程序开 ...

  7. django模板层(templates)

    1.基础部分 通过使用模板,就可以在URL中直接调用HTML,它还是松耦合的,灵活性强,而且更容易维护 而且可以将变量通过一定的方式嵌入到HTML中,最终渲染到页面,总的来说基于模板完成了数据与用户之 ...

  8. 04-01 Django之模板层

    Django之模板层 一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.cs ...

  9. Django:(2)视图层&模板层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

随机推荐

  1. 请问微信小程序let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. [JavaScript] 纯文 ...

  2. C++解析四-友员函数、内联函数、静态成员

    友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员.尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数.友元可以是一个函 ...

  3. do_bootrk

    1. LMB (logical memory blocks) lmb为uboot下的一种内存管理机制,用于管理镜像的内存.lmb所记录的内存信息最终会传递给kernel.在/include/lmb.h ...

  4. ldap+flask+python2实现统一认证里面的那些编码神坑

    首先想吐槽下,直接接手别人的项目,而且是经过四五个人手的项目,是怎么个痛苦.两三套代码django.flask.tornado应有尽有,代码里,掰开手指头就可数的全英文注释,几台服务器没交接清楚,所有 ...

  5. 3.1 Makefile

    安装make 安装make sudo apt-get install make make -v

  6. mysql存储过程中使用游标

    用户变量一般以@开头,作用于全局范围 局部变量需用 declare 定义格式为 declare 变量名 数据类型 [default value]; mysql 数据类型有 int ,float,dat ...

  7. tomcat启动失败,提示信息:Unable to ping server at localhost:1099

    jdk1.7+maven9.0.0开启服务器时,提示Unable to ping server at localhost:1099 然后换成tomcat8.5.1就成功开启服务器

  8. 关于jvm钩子 Runtime.getRuntime().addShutdownHook

    转自: http://www.cnblogs.com/nexiyi/p/java_add_ShutdownHook.html 在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候 ...

  9. 类的无参方法和Doc注释

    一:Java Doc注释: 语法: /** *AccpSchool 类 *@author JadeBird *@version 1.0 2018/5/26 */ Java Doc是前Sun公司提供的一 ...

  10. 20165326 java第九周学习笔记

    第九周学习笔记 URL类 属于java.net包 最基本三部分:协议(对象所在的Java虚拟机支持).地址(能连接的有效IP地址或域名).资源(主机上的任何一个文件) 常用构造方法 public UR ...