内容来源于【2020 最新python教程】第五部分:Django框架课程教学笔记和maple-shaw博客笔记
一. MVC框架和MTV框架
该部分内容转载自aaronthon
(一)MVC:
M:model模型,操作数据库;
V:view视图,展示数据;
C:contriller控制器,流程业务逻辑
(二)MTV:
M:model模型,ORM(对象关系管理器);
T:template模板;
V:view视图,业务逻辑
二. Django模板系统
Django模板中的{{***}}和{{%*** %}}符号{{***}}表示变量,在模板渲染的时候替换成对应的值,如从view中传入template的值。{{%*** %}}表示逻辑相关的操作,图在template中的for标签,if标签等。
(一) 变量
变量名由字母数字和下划线组成,不能以数字开头
(二) 模板语法
模板测试用例
#在urls.py文件中加入
path('template_test/', views.template_test),
#在views.py 中定义template_test方法
def template_test(request):
num=1
string='happy every day'
name_list=['rongmei','meizi']
dic={'name':'rongmei','age':24}
tup=('rongmei','meizi')
name_set={'rongmei','meizi'}
class Person:#定义类
def __init__(self,name,age):
self.name=name
self.age=age
def talk(self):
return '今天雾霾比较严重'
def __str__(self):
return('<Person object {}:{}>'.format(self.name,self.age))
rongmei=Person('rongmei',24)#实力化对象
return render(request,'template_test.html',
{
'num':num,
'string':string,
'name_list':name_list,
'dic':dic,
'tup':tup,
'name_set':name_set,
'rongmei':rongmei
})
#在模板中渲染
<body>
{{ num }}
<br>
{{ string }}
<br>
{{ name_list.0 }}<!--用‘.’+索引代替python中的[索引]进行索引-->
<br>
{{ dic }}<!--模板中调用方法不需要加'()',如dic.keys,dic.items-->
<br>
{{ tup }}
<br>
{{ name_sey }}
<br>
{{ rongmei.talk }}<!--只能执行不带参数的方法-->
<br>
</body>
结果
注:当模板系统遇到’(.)'时,会按照如下顺序进行查询
- 在字典中查询
- 属性或者方法
- 数字索引
(三)Filters过滤器
过滤器用来修改变量的显示结果
语法:{{变量1|过滤器1:参数},{变量2|过滤器2:参数},{变量2|过滤器3:参数}},参数是可选的,最多一个参数
注:’:'左右没有空格
- default过滤器,变量不存在或者为空时使用
{value|defalut:‘nothing’},如果value变量没有传值的话就显示默认的‘nothing’字符串。
如在模板文件中写{{变量}},该变量未在views中定义,则在页面中什么都不显示,若使用defalut过滤器{{变量|defalut:‘默认值’}},则在页面中显示默认值。 - filesizeformat过滤器将数字转化为一个“人类可读的”文件尺寸,{例如‘13KB’,‘4.1MB’等}
例如:在views中定义变量’filesize’:1024,在模板中直接渲染{{filesize}}变量,在页面中显示数字1024,在渲染时加filesizeformat过滤器即{{filesize|filesizeformat}},在页面中显示1KB(为文件的大小) - add过滤器,加法或者字符串,列表等拼接的作用
{{4|add:2}}结果为6
{{4|add:-2}}结果为2,在参数前面加-号即为减法
{{‘hello’|add:‘world’}}结果为helloworld。 - lower过滤器,小写
{{value|lower}} - upper过滤器,大写
{{value|upper}} - title过滤器,标题
{{value|title}} - ljust过滤器,左对齐
{{value|ljust}} - rjust过滤器,右对齐
{{value|rjust}} - length过滤器,返回value的长度
{{value|length}} 若value为[1,2,3,4],结果为4 - slice过滤器,切片
{{value|slice:'0:2’}}取value值的索引为0和1的元素,引号中的写法和python中的语法一致 - first过滤器,取第一个元素,last过滤器取最后一个元素
- join过滤器,使用字符拼接列表,通python的str.join(list)
{{value|join:’’}},将value(list类型)中的元素用‘’连接起来 - truncatechars过滤器,如果字符串字符多余指定的字符数量,则被截断,阶段的字符串将以可翻译的省略号“……”结尾,参数为截断的字符数,truncatewords以单词为单位进行截断,或者以空格进行截断。
- date过滤器,日期格式化,用的稍微多一点
{value|date:‘Y-m-d H:i:s’},在python中格式化年月日为%Y-%m-%d,时分秒为%H:%M:%S,与Django中稍有不同,需要注意
import datetine
now=datetime.datetime.now()#获取当前时间
或者在settings中将USE_LION改为false,然后将时间的格式设置为DATETIME_FORMAT='Y-m-d H:i:s’也能达到上述效果
DATE_FORMAT=‘Y-m-d H:i:s’#仅date类型
TIME_FORMAT=‘Y-m-d H:i:s’#仅time类型
15. safe过滤器,告诉Django这段代码是安全的,不必进行转义,即不对HTML标签和JS等语法进行自动转义,如:
{value|}
(四)自定义过滤器
- 在app下创建一个名为templatetags的python包
- 在templatetags中创建一个python文件,文件名可自定义(mytags.py)
- 在自定义的文件中导入template模板和写register=template.Library()语句,此步骤为固定写法
from django import template
register=template.Library()#此处的()不能少
注:上述步骤中,包的名字templatetags不能错,且register变量名字也不能错
4. 写函数+装饰器
@register.filter#注册过滤器
def add_arg(value,arg):#自定义过滤器最多两个参数,value为过滤器变量
#功能,字符串拼接
return "{}_{}".format(value,arg)
- 加载过滤器和使用自定义过滤器
{% load mytags %}<!--导入过滤器-->
{{ rongmei.name|add_arg:'tanqi' }}<!--在模板中使用自定义过滤器-->