5. Django templates模板 (一)
导例:
HTML可以被直接硬编码在views.py之中。如下:
在主urls.py文件中,添加新的条目:
path('show/', views.show),
然后,我们在blog的views.py中添加处理函数:
导入datetime和HttpResponse
def show(request):t = datetime.datetime.now()return HttpResponse("<h1>now time's %s</h1>" % t)
然后在浏览器中打开:
虽然,上面的方式也实现了目标内容的显示,但是不难发现:对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。不利于合作分工的实现。编写 Python代码和设计人员制作模板两项工作应该同时进行,提高效率。
而且,将页面的设计和Python的代码分离开会更干净简洁更容易维护。关键是解耦。因为对于网站而言,后端的代码并不会经常修改,前端会经常修改。而且如果杂糅在一起,就要求前端的开发人员也要能看懂后端的代码,而且开发的效率不高。
在views.py中返回的render由来:
from django.template import Context, Templatedef show(request):template = Template("<h1>now time's {{ time }}</h1>")t = datetime.datetime.now()context = Context({'time': t})html = template.render(context)return HttpResponse(html)
相当于是底层封装了一下,然后我们才能使用下面这种简便的书写方式:
def show(request):t = datetime.datetime.now()return render(request, "time.html" , {'t':t})
应用:
<h1>now time's {{ t }} </h1>
效果:
上篇视图中也有介绍。
传入模板数据:句点字符 (.)
一、传入普通的列表
在views.py中传入列表数据:
def show(request):list= ['weizu','baidu','tent']return render(request, "time.html" , locals())
在time.html中,接收收到的数据:
<h1>列表数据:{{ list.0 }}</h1>
<h1>列表数据:{{ list.1 }}</h1>
<h1>列表数据:{{ list.2 }}</h1>
结果:
二、传入字典数据:
在views.py中传入列表数据:
def show(request):dict={'name':'weizu', 'age':23}return render(request, "time.html" , locals())
在time.html中,接收收到的数据:
<h1>字典数据:{{ dict.name }}</h1>
<h1>字典数据:{{ dict.age }}</h1>
结果:
三、传入对象数据:
在views.py中添加数据:
def show(request):s = stu('Tom', 23)return render(request, "time.html" , locals())
在time.py中,接收数据:
<h1>类对象数据:{{ s.name }}</h1>
<h1>类对象数据:{{ s.age }}</h1>
结果:
变量的过滤器filter (以下案例不写传入具体部分了)
语法格式: {{obj|filter:param}} 即:{{ 对象 | 过滤函数:过滤参数 }}
{{ name|lower }}。这将在变量 {{ name }} 被过滤器 lower 过滤后再显示它的值,该过滤器将文本转换成小写。使用管道符号 (|)来应用过滤器。过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
如: {{ my_list|first|upper }} 将第一个元素并将其转化为大写。
内置过滤器:
upper 转字母为大写
传入:s = stu('Tom', 23) # name age
渲染:<h1>{{ s.name | upper }}</h1>
效果:TOM
add 把add后的参数加给value
传入:value = 4
渲染:{{ value|add:"2" }}
效果:6
解释:过滤器首先会强制把两个值转换成Int类型。如果强制转换失败, 它会试图使用各种方式吧两个值相加。它会使用一些数据类型 (字符串, 列表, 等等.)
last 返回列表中的最后一个项目
传入:list ['a', 'b', 'c', 'd']
渲染:{{ value|last }}
效果:d
length 返回值的长度
传入:list=['a', 'b', 'c', 'd'] #或"abcd",
渲染:{{ value|length }}
效果:4
addslashes 给变量中的引号前加上斜线
传入:list=['Tom','Jok',"Ja'r're"]
渲染:{{ list.2 | addslashes }}
效果:Ja\'r\'re
capfirst 首字母大写
传入:list=['Tom','Jok',"jarre"]
渲染:{{ list.2 | capfirst }}
效果:Jarre
cut 从字符串中移除指定的字符
传入:list=['Tom','Jok',"jarre"]
渲染:{{ list.2 | cut:'r' }}
效果:jae
date 格式化日期字符串
传入:time = datetime.datetime.now()
渲染:{{ time | date:"Y年m月d日" }}
效果:2019年04月02日传入:time = datetime.datetime.now()
渲染:{{ time | date:"y年m月d日" }}
效果:19年04月02日
default 如果值是False,就替换成设置的默认值,否则就是用本来的值
传入:sex = False #女
渲染:{{ sex | default:"女" }}
效果:女传入:value5=[]
渲染:{{ value5|default:'空的' }}
效果:空的
default_if_none 如果值是None,就替换成设置的默认值,否则就使用本来的值
传入:value = None
渲染:{{ value | default_if_none:"空" }}
效果:空
safe 传递含有html标签的时候,安全渲染
传入:a = "<a href='www.baidu.com'>click</a>"
渲染:<h1>{{ a }}</h1>
效果:<a href='www.baidu.com'>click</a> 而不是我们希望的可点击链接
加入管道safe后
渲染:<h1>{{ a | safe }}</h1>
结果:click 可点击的链接另一种解决方法:
渲染:
{% autoescape off %}{{ a }}
{% endautoescape %}结果:click 可点击的链接
其实,不光是a标签,一起的标签也是同理。
striptags 去标签
传入:a = "<a href='www.baidu.com'>click</a>"
渲染:<h1>{{ a | striptags }}</h1>
结果:click 看源码:就只是<h1>click</h1>
urlencode url编码
传入:a = "http://www.baidu.com"
渲染:<h1>{{ a | urlencode }}</h1>
结果:http%3A//www.baidu.com
参考:http://www.cnblogs.com/yuanchenqi/articles/6083427.html
参考:https://www.cnblogs.com/gregoryli/p/7699352.html
作者:无涯明月
上篇:4. Django 视图函数
下篇:
5. Django templates模板 (一)相关推荐
- django html过滤,django templates模板过滤器过滤掉字符串含有的html标签
django templates模板过滤器过滤掉字符串含有的html标签 在template用法:{{ myvar|striptags }} 如果myvar的字符串是"吾爱孟夫子,风流天下闻 ...
- python后台架构Django教程——templates模板
全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...
- Django学习系列之五:Django 的模板的render替换render_to_string用法及templates模板查找路径顺序
Django学习系列之五:Django 的模板的render替换render_to_string用法及templates模板查找路径顺序 1.Django 的模板的render替换render_to_ ...
- django的模板系统
django的模板系统 设置模板路径 在manager.py的同级目录下新建一个templates的文件夹 在项目根目录下的setting里面的TEMPLATES变量里面加上 : 'DIRS': ...
- 04 Django之模板系统
一.语法 关于模板渲染只需要记住两种特殊符号(语法): {{ }} 和 {% %} (变量相关用{{ }} 逻辑相关用{% %}) 二.变量 在Django的模板语言中按照{{ 变量名 }}来使用 ...
- Django templates 和 urls 拆分
如果在Django项目 下面新建了blog和polls两个APP应用,在每个APP下面都各自新建自己的url和templates,那么我们需要如何进行项目配置呢? INSTALLED_APPS = [ ...
- Python测试开发django5.templates模板变量传参
上一篇,我们学习了Python测试开发django4.templates模板配置 templates模板中html文件是一个静态页面,写四的,如果有时我们想动态的传入一些不同的参数,想实现在一个固定的 ...
- Python测试开发django4.templates模板配置
[上一篇]我们讲了Python测试开发django3.视图和URL配置 今天详细介绍下 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容. 我们已经知道创建项目用django-a ...
- Django 使用模板页面,块标签,模型
1.Django 使用模板页面 Django对于成体系的页面提出了模板继承和模板加载的方式. 1.导入静态页面 2.导入静态文件(css,js,images) 3.修改页面当中的静态地址 1.sett ...
最新文章
- Geo-CNN的三维点云
- 如何创建修改分区表和如何查看分区表
- web工程中的各种路径(eclipse开发)
- (操作系统实验)第四次说明
- Angular运行在java_在本地运行现有Angular项目
- 日常问题——阿里云服务器ssh经常一段时间就断掉解决办法
- [ES6] 细化ES6之 -- 数组的扩展
- php 多维数组 列,总结PHP实现提取多维数组指定一列的方法
- 提高xshell使用效率
- Session 工作原理
- kali linux 安装驱动安装教程,kali linux安装NVIDA显卡驱动教程
- 电脑训练数字键的测试软件,数字按键练习工具
- 高通WCNSS驱动简析
- c语言结构体的流程图怎么画,结构流程图不会画?手把手教你学会!
- PHP 中的 use function是什么意思
- macos系统镜像iso_我们一起来安装----虚拟机安装macOS
- js判断字符串字符数(汉字算两个)
- 瑞科生物港交所上市:市值121亿港元 9个月期内亏损5.2亿
- 网络安全——DDOS攻击
- 淘宝客导购产品设计(二)