Django框架学习(二)

内容来源于【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>

结果
在这里插入图片描述
注:当模板系统遇到’(.)'时,会按照如下顺序进行查询

  1. 在字典中查询
  2. 属性或者方法
  3. 数字索引

(三)Filters过滤器

过滤器用来修改变量的显示结果
语法:{{变量1|过滤器1:参数},{变量2|过滤器2:参数},{变量2|过滤器3:参数}},参数是可选的,最多一个参数
注:’:'左右没有空格

  1. default过滤器,变量不存在或者为空时使用
    {value|defalut:‘nothing’},如果value变量没有传值的话就显示默认的‘nothing’字符串。
    如在模板文件中写{{变量}},该变量未在views中定义,则在页面中什么都不显示,若使用defalut过滤器{{变量|defalut:‘默认值’}},则在页面中显示默认值。
  2. filesizeformat过滤器将数字转化为一个“人类可读的”文件尺寸,{例如‘13KB’,‘4.1MB’等}
    例如:在views中定义变量’filesize’:1024,在模板中直接渲染{{filesize}}变量,在页面中显示数字1024,在渲染时加filesizeformat过滤器即{{filesize|filesizeformat}},在页面中显示1KB(为文件的大小)
  3. add过滤器,加法或者字符串,列表等拼接的作用
    {{4|add:2}}结果为6
    {{4|add:-2}}结果为2,在参数前面加-号即为减法
    {{‘hello’|add:‘world’}}结果为helloworld。
  4. lower过滤器,小写
    {{value|lower}}
  5. upper过滤器,大写
    {{value|upper}}
  6. title过滤器,标题
    {{value|title}}
  7. ljust过滤器,左对齐
    {{value|ljust}}
  8. rjust过滤器,右对齐
    {{value|rjust}}
  9. length过滤器,返回value的长度
    {{value|length}} 若value为[1,2,3,4],结果为4
  10. slice过滤器,切片
    {{value|slice:'0:2’}}取value值的索引为0和1的元素,引号中的写法和python中的语法一致
  11. first过滤器,取第一个元素,last过滤器取最后一个元素
  12. join过滤器,使用字符拼接列表,通python的str.join(list)
    {{value|join:’’}},将value(list类型)中的元素用‘’连接起来
  13. truncatechars过滤器,如果字符串字符多余指定的字符数量,则被截断,阶段的字符串将以可翻译的省略号“……”结尾,参数为截断的字符数,truncatewords以单词为单位进行截断,或者以空格进行截断。
  14. 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|}

(四)自定义过滤器

  1. 在app下创建一个名为templatetags的python包
  2. 在templatetags中创建一个python文件,文件名可自定义(mytags.py)
  3. 在自定义的文件中导入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)
  1. 加载过滤器和使用自定义过滤器
{% load mytags  %}<!--导入过滤器-->
{{ rongmei.name|add_arg:'tanqi' }}<!--在模板中使用自定义过滤器-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值