django框架之模板系统
MVC框架
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
MTV框架:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
Django模板中只需要记两种特殊符号:
{{ }}和 {% %}
{{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作
{{ 变量名 }}
变量名由字母数字和下划线组成。
点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。
举例:
view中的代码:
def test(request):name = 'alex'age = 83name_list = ['和尚','阿三','阿瑟东','独家']return render(request,'test.html',{'name':name,'age':age,'name_list':name_list,})
模板中的代码:
<p>{{ name }}</p> <p>{{ age }}</p> <p>{{ name_list }}</p> <ul>{% for name in name_list %}<li>{{ name }}</li>{% endfor %} </ul> <hr> {{ name_list.0 }} {{ name_list.1 }} {{ name_list.2 }} {{ name_list.3 }}
列表中的名字可以通过for循环取出,也可以用 . 索引 取出。
字典中的名字是通过 . key 取出 ,也可以通过for循环取
例子:
views中的代码:
name_dict = {'name1': '和尚','name2': '和尚贼秃','name3': '杜标','name4': '杜菊飞',}
模板html的代码:
{{ name_dic }} {{ name_dic.name1 }} {{ name_dic.name2 }} {{ name_dic.name3 }} {% for i in name_dic.values %} {{ i }}{% endfor %} {% for key,value in name_dic.items %} {{ key }}:{{ value }}{% endfor %}
也可以将类渲染到模板中,类的取值可以通过调用 类.属性名或方法名 来获取值。例子:
views中的代码:
class Person(object):def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return '<Person object: {}>'.format(self.name)def dream(self):return '{}我想带你去浪漫的西二旗,然后一起去上地做面试题,其实我比较喜欢望京西'.format(self.name)def __repr__(self):return '<Person object: {}>'.format(self.name) def test(request):p1 = Person('alex',22)p2 = Person('qwer',25)return render(request,'test.html',{'p1':p1,'p2':p2, P_list = [p1,p2] })
模板中的代码:
{{ p1 }} {{ p1.name }} {{ p1.age }} {{ p1.dream }} <br> {{ p2 }}
这里插入一个小知识:
class中 __init__方法和__repr__方法的区别:
如果是直接调用类中的属性或方法,则用的是__init__方法,如果是程序调用类中的属性或方法,就用的是__repr__方法,上述代码中,如果将p1,p2放在列表中,通过P_list列表调用类的属性或方法,就调用的是__repr__方法。在python2中__repr__的方法叫做__unicode__。
Filters:
翻译为过滤器,用来修改变量的显示结果。
语法: {{ value|filter_name:参数 }}
'|'左右没有空格没有空格没有空格
default
{{ value|default:"nothing"}}注:TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用例子:
{{ qwer|default:'没有传这个值,使用默认值' }}
filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
views代码:
file_size1 = 1024 file_size2 = 1024*1024
模板中的代码:
{{ file_size1|filesizeformat }} {{ file_size2|filesizeformat }}
add
给变量加参数 可是以实现数字加法,字符串拼接,列表的拼接
{{ value|add:"2" }}
value是数字4,则输出结果为6。
{{ first|add:second }}
如果first是 [1,.2,3] ,second是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6] 。
lower
小写
{{ value|lower }}
upper
大写
{{ value|upper}}
title
标题
{{ value|title }}
ljust
左对齐
"{{ value|ljust:"10" }}"
rjust
右对齐
"{{ value|rjust:"10" }}"
center
居中
"{{ value|center:"15" }}"
length
{{ value|length }}
返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.
slice
切片
{{value|slice:"2:-1"}}
first
取第一个元素
{{ value|first }}
last
取最后一个元素
{{ value|last }}
join
使用字符窜拼接列表。同python的str.join(list)。 可以将列表拼接成字符串
{{ value|join:" // " }}
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:截断的字符数
{{ value|truncatechars:9}}
date
日期格式化
view中的代码:
import datetimedate_now = datetime.datetime.now() date_day = datetime.date()print('1111111', date_now)
模板中的代码:
{{ date_now|date:'Y-m-d H:i:s' }}<br> {{ date_now}}{{ date_day}}
如果不想再模板后面加参数可以现在setting中进行设置,
safe
views代码:
value = "<a href='#'>点我</a>"
模板中的代码:
{{ value|safe }} {{ value }}
自定义filter:
自定义过滤器只是带有一个或两个参数的Python函数:
- 变量(输入)的值 - -不一定是一个字符串
- 参数的值 - 这可以有一个默认值,或完全省略
例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”
在app01下面新建一个package,名字必须为templatags,然后再这个文件夹下新建一个py文件,然后就在这个py文件里写自己的filter过滤器。
from django import template register = template.library()@register.filter #如果后面有name参数:@register.filter(name='sb'), #就相当于给add_sb的过滤器起了个别名,那么在模板中使用的时候,就要用sb这个别名。def add_sb(value,arg):return '{}_{}_sb'.format(value,arg)
然后再模板中,先导入自己定义的myfilters文件,然后取值:
{%load myfilters%} {{name_list.0|add_sb:'就是'}} #@register.filter(name='sb')使用name参数后,就应该写成 #{{name_list.0|sb:'就是'}} #如果给arg赋上值,模板中就不需要写参数了{{name_list.1|add_sb}}
转载于:https://www.cnblogs.com/yb635238477/p/9392544.html
django框架之模板系统相关推荐
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
- django框架运用--------股票系统
django框架运用--------股票系统 这个系统是我和几个队友两天做出来的,可能功能方面没有实现太多,但足够体现django框架的运用,我是主要负责后端,所以这里只讲一下后端的代码. 创建dja ...
- Django框架的模板层详解
目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...
- python的django框架与springboot_Python系统教学|为什么Django框架在Python开发很重要?...
Django框架在Python开发很重要,Django框架是一个web框架,且是一个后端框架程序,它不是服务器,需要注意Django框架帮我们封装了很多的组件,帮助我们实现各种功能,具有很强的扩展性. ...
- 基于django的web模板系统
1 django模板系统介绍 1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便 2,其次 ...
- python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告
python景区购票系统毕设 django景区购票系统毕设 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发 ...
- python毕业设计作品基于django框架校园网站系统毕设成品(7)中期检查报告
整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...
- python毕业设计作品基于django框架校园网站系统毕设成品(3)后台管理功能
整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...
- python毕业设计作品基于django框架校园网站系统毕设成品(4)开题报告
整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...
最新文章
- Android 自定义view时用到的TypedArray
- jQuery父级以及同级元素查找
- 跨站点请求伪造(CSRF)总结和防御
- 使用CDS view开发SAP Marketing contact的facet追溯工具
- python规模_python语言计算生态规模有多大?
- Oracle 11g DRCP连接方式——基本原理
- python函数返回的元组_python – 从函数返回一个单独的元组元组
- 实训09.09:简单的彩票系统(注册信息)
- Xposed框架安装失败
- csgo删除服务器地图在哪个文件夹,CSGO de_cache地图
- win10安装solidworks 注册机闪退的问题,转自知乎
- 二十一条自动化测试过程中遭遇的问题及解决思路
- Scheme语言 入门语法
- 若依管理系统漏洞利用
- keil5中输入中文并且美化字体
- 判断入射满射c语言编码,数学上可以分三类函数包括() 答案:单射双射满射...
- 认识Python继承:super()
- android新浪微博改进版
- [Qt]使用QSS的扁平化风格的小作业—— 附源码
- Spark Transformation转换算子和Action行动算子