博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(9)模板层 - templates(模板语言、语法、取值、过滤器、变量的使用)
阅读量:4603 次
发布时间:2019-06-09

本文共 3030 字,大约阅读时间需要 10 分钟。

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

       
模板语言 {
{ time }}

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='' # 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

       
模板语言

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

{

{ ctime }}

{

{ li }}

{

{ dic }}

{#取出字典中的值,是用 . \python中的是[]#}

{

{ dic.name }}

{

{ dic.age }}

{#列表取值#}

{

{ li.1 }}

{#也可以传入函数,但是不能加()#}

{

{ test }}

{#传入一个对象#}

{

{ lqz.name }}

{#add就是内置过滤器#}

{

{ count | add:10 }}

{#default内置过滤器 就是当传入的变量是False的时候显示后面设定的字符,如果是True的时候就是显示True#}

{

{ b | default:'当b是False的时候显示这个默认值' }}

{#length 内置过滤器,计算变量的长度#}

{

{ dic | length }}

{#filesizeformat 内置过滤器,将变量的值根据长度自动进行一个单位换算,不同长度显示不同的单位,kb\mb\tb#}

{

{ counts | filesizeformat }}

{#date内置过滤器,将python中的时间对象变成自己设定的类型在页面中显示,date后面格式一定是一个字符串形式#} {#y对应年,m对应月,d对应日#}

{

{ dat | date:'Y年-m月-d日 H:i:s' }}

{#在python中将时间处理成指定格式后返回,可以不用过滤器#}

{

{ dates }}

{# safe 就是将视图中的变量值原封不动的在页面中显示 #}

{

{ ss | safe }}

 

xss攻击

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

xss攻击简单模拟

views.py

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

index.html

       
模板语言

xss攻击模拟

{#如果这里用safe将变量的值原封不动的传入,则会造成xss攻击#}

{

{ ss | safe }}

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

 

转载于:https://www.cnblogs.com/shizhengquan/p/10490452.html

你可能感兴趣的文章
HTTP 错误 500.21 - Internal Server Error 解决方案
查看>>
Bucks sign Sanders to $44 million extension
查看>>
【PHP】Windows下配置用mail()发送邮件
查看>>
海量数据处理面试题集锦与Bit-map详解
查看>>
【WINFORM】C#中不通过浏览页面直接登入博客园的实现
查看>>
Nhibernate和EF的区别
查看>>
基于java spring框架开发部标1078视频监控平台精华文章索引
查看>>
Python安装pandas
查看>>
人类简史
查看>>
如何允许JQuery 与 其他库共存
查看>>
java 设计模式学习
查看>>
一次网络程序Debug过程
查看>>
Angular系列文章之angular路由
查看>>
C++primer 10.4.2节练习
查看>>
perl encode_json 会产生 UTF-8 (binary) string decode_json 需要一个 UTF-8 (binary) string
查看>>
haporxy 负载elasticsearch
查看>>
perl return和break
查看>>
Mysql 和Oracle rows 区别
查看>>
分页技术总结
查看>>
jQuery手风琴广告展示插件
查看>>