1.Django框架介绍

1.1MVC框架(Model View Controller)

​ 全名是Model View Controller ,是软件工程中的一种软件架构模式,把软件分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低,重用性高,声明周期成本低等优点。

  • M:model模型

  • V:view视图-HTML

  • C:controller 控制器 ---路由传递指令 业务逻辑

  1. 最上层 是视图层(veiw)面向用户,它提供用户操作界面
  2. 中间一层 是控制层(Controller),负责根据用户从视图层输入指令,选取"数据层"中的数据,然后对其进行相应的操作,得到结果
  3. 最底层 数据层(Models)程序操作的数据或信息
  4. 这三层紧密联系,但互相独立,每一层内部变化不影响其它层,每一层都有对外提供接口,供上面一层调用。

1.2Django中的MTV(Model Template View)

M:Model 模型ORM:负责业务对象与数据库的对象

T:Template 模版-HTML:负责如何把页面展示给用户

V:View 业务逻辑:负责业务逻辑,并在适当时候调用Model 和Template

此外:Django还有urls分发器,负责将URL页面请求奋发给不同views处理,views在调用相应Model和Template

1.3string_if_invalid 设置

  • 在settings.py 文件下设置如下图

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  5. ,
  6. 'APP_DIRS': True,
  7. 'OPTIONS': {
  8. 'context_processors': [
  9. 'django.template.context_processors.debug',
  10. 'django.template.context_processors.request',
  11. 'django.contrib.auth.context_processors.auth',
  12. 'django.contrib.messages.context_processors.messages',
  13. ],
  14. "string_if_invalid":"变量不存在",
  15. },
  16. },
  17. ]
  • 应用:只作调试用途!当遇到一个不存在的变量时,许多模板,包括Admin站点中的模板,都依赖于模板系统的默认。如果您设置string_if_invalid ,则当变量不存在就会显示你设置的值。而不是''。而default筛选器以显示提供的默认值,而不是无效的字符串。

  • HTML显示效果

2.Django常见命令

2.0 注释:

  1. {#这是注释#}
  • Django模版中特殊符号

    1. {{ }} 表示变量,在模版替换成值
    2. {% %} 表示逻辑相关的操作

2.1变量

  • 格式:{{变量名}}
  • 变量名由字母数字和下划线组成
  • 点(.)在模版语言中有特殊的含义,可以获取相应属性值
  1. #views.py
  2. from django.shortcuts import render
  3. from app01 import model
  4. class Person:
  5. def __init__(self,name,age):
  6. self.name = name
  7. self.age = age
  8. def talk(self):
  9. return "咱也不知道,咱也不敢问!"
  10. def __str__(self):
  11. return "Person obj:{}-{}".format(self.name,self.age)
  12. def test(request):
  13. lst = [11,22,33]
  14. dic = {"name":"xjk","age":22}
  15. obj = Person("曹操",55)
  16. return render(request,"test.html",{"lst":lst,"dic":dic,"obj":obj})
  1. #test.html
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <p>{{ lst.0 }}</p>
  10. <p>{{ dic.name }}</p>
  11. <p>{{ obj.name }}</p>
  12. <p>{{ obj.talk }}</p>
  13. </body>
  14. </html>
  1. #结果
  2. 11 #列表索引0的数
  3. xjk #获取字典name键的值
  4. 曹操 #获取对象的name值
  5. 咱也不知道,咱也不敢问! #对象talk的方法
  • 需要注意:当模版系统遇到一个(.)时,会按照如下的顺序去查询:

    • 在字典中查询
    • 属性或方法
    • 数字索引

2.2 Filters过滤器

  • 修改变量的显示结果
  • 语法:{{value|filter_name:参数}} 注意 “:” 左右没有空格
1 default
  • 如果value值没有传,就显示"什么都没有".
  1. {{ value|default:"什么都没有" }}
2 filesizeformat
  • 将值格式化为一个人类可读文件尺寸(例如"13KB","4.1MB","102bytes"等等)
  1. {{ 234344|filesizeformat }}

3 add
  • 给变量加参数
  1. 如果变量时数字?
  2. value = "125" 为字符串
  3. {{value|add:"2"}}
  4. 输出结果:127
  5. vlaue = 125 为数字
  6. {{value|add:"2"}}
  7. 输出结果:127
  8. {{list1|add:list2}}
  9. list1 list2是列表,那么输出当list1list2相加,一个新的列表,
  • add传入2个参数,如果一个参数为字符串字母一个为数字,则无法做拼接或累加
4 lower
  • 小写
  1. {{ value|lower }}
5 upper
  • 大写
  1. {{ value|upper}}
6 title
  • 标题
  1. {{ value|title }}
7 ljust
  • 左对齐
  1. "{{ value|ljust:"10" }}"
8 rjust
  • 右对齐
  1. "{{ value|rjust:"10" }}"
9 center
  • 居中
  1. "{{ value|center:"15" }}"
10 length
  • 长度,可以是字符串,可以是列表
  1. {{value|length}}
11 slice
  • 切片
  1. {{ value|slice:"2:-1"}}
  2. {{ value|slice:"-2:1:-1"}}
12 first
  • 取第一个元素
  1. {{ value|first }}
13 last
  • 取最后一个元素
  1. {{ value|last }}
14 join
  • 使用字符串拼接列表,同python中str.join(list)
  1. {{ value|join:" // " }}





15 truncatechars
  • 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
  1. views.py
  2. value = "hello python"
  3. test.html
  4. {{ value|truncatechars:5 }}
  5. 显示结果:he...
  6. #表示如果字符串长度超过5个长度,就只显示5个。
  7. 显示5个字符里,包括了三个点。
16 truncatewords
  • 如果英文单词字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
  1. views.py
  2. value = "hello my name is Lilei what's yor name"
  3. test.html
  4. {{ value|truncatewords:5 }}
  5. 显示结果:hello my name is Lilei ...
17 safe
  • Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
  1. {{value|safe}}
  • 示例:views.py
  1. {#views.py#}
  2. def test(request):
  3. value = '<a href="https://www.baidu.com/">百度</a>'
  4. return render(request,"test.html",{"value":value}
  5. {#test.html#}
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8">
  10. <title>Title</title>
  11. </head>
  12. <body>
  13. <div>{{ value }}</div>
  14. <div>{{ value|safe }}</div>
  15. </body>
  16. </html>
  • 输入结果如下:

18 date
  • 日期格式化
  • 若要显示
  1. {#views.py#}
  2. import datetime
  3. now = datetime.datetime.now()
  4. {#test.html#}
  5. <div>{{ now|date:"Y-m-d H:i:s" }}</div>
  • 显示效果

如果有用多个时间写多个{{ now|date:"Y-m-d H:i:s" }},这样会代码冗余变长,可以通过配置setting.py文件内容

  1. USE_L10N = False
  2. DATETIME_FORMAT="Y-m-d H:i:s"
  3. DATETIME_FORMAT = "Y年m月d日 H时i分s秒"
  • 此时在views中可以{{now}} 直接调用

2.3 自定义filter

1.在app下创建一个名为templatetags的包(必须)

2.在python中创建py文件,文件名自定义,要求为.py

3.在py文件中写:

  1. from django import template
  2. register = template.Library() #register也不能变

4.写函数 + 装饰器

  1. @register.filter
  2. def add_xx(value,arg):
  3. return "{}-{}".format(value,arg)

5.html使用自定义函数

  1. {% load py文件%}}
  2. {{ "mjj"|add_xx:"haha"}}

注意:自定义filter,可以这么设置@register.filter(is_safe=True) 保护

  • 示例

解题:

  • 若想对自定义函数更名,当然调用时候也要更名

Django:MTV——模版语句的更多相关文章

  1. 初识DJango——MTV模型

    一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...

  2. Django的模版引擎与模版使用

    Django的模版引擎与模版使用 模版引擎是模版响应的后端.模版指的是HTML.css,js等相关的文件.模版引擎是将这些表示层文件与数据相整合在一起,然后将整合后的数据给到响应类型判断采用一次性响应 ...

  3. Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag

    Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...

  4. Django之模版层

    一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...

  5. Django查询SQL语句

    Django查询SQL语句 # 1 res=models.Book.objects.all() # print(res)#<QuerySet [<Book: Book object> ...

  6. django显示SQL语句

    django显示SQL语句 有时候我们使用模型查询数据,但是并不知道具体执行的SQL语句到底对不对.那么可以通过下面的方法打印出具体执行的SQL语句.这样有助于调试: queryset = MyMod ...

  7. Django MTV

    MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的时候 ...

  8. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  9. django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...

随机推荐

  1. THOR: Tracking Holistic Object Representations

    THOR: Tracking Holistic Object Representations BMVC 2019 Oral 2019-08-04 10:30:09 Paper: https://arx ...

  2. dubbo、zookeeper心跳相关参数解析与测试

    dubbo consumer和provider的心跳机制 dubbo客户端和dubbo服务端之间存在心跳,目的是维持provider和consumer之间的长连接.由dubbo客户端主动发起,可参见d ...

  3. spring boot jar包替换报错之Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.

    spring boot用layout ZIP打出来的包能够支持外部classpath,但是当用rar/7zip替换其中的jar后,报下列错误: Unable to open nested entry ...

  4. 005 vue路由

    一:元素的获取 1.ref元素获取 可以通过ref获取DOm,也可以获取组件的引用 <!DOCTYPE html> <html lang="en"> < ...

  5. Android 加密之文件级加密(CE/DE)

    https://blog.csdn.net/myfriend0/article/details/77094890/   Android加密之文件级加密

  6. net::ERR_ABORTED 404 (Not Found)

    对于按需加载(on-demand-load)或加载外部资源(external resources)(如图片.文件等)来说,webpack的配置,output.publicPath是很重要的选项.如果指 ...

  7. [简短问答]LODOP套打问题及相关

    该博文为简短问答,具体详细介绍可查看本博客的相关博文,套打及位置相关详细博文:LODOP中的各种宽高和位置简短问答.LODOP不同打印机出现偏移问题.Lodop打印控件打印机可打区域的影响 设置纸张边 ...

  8. [LeetCode] 326. Power of Three 3的次方数

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...

  9. [LeetCode] 534. Design TinyURL 设计短网址

    Note: For the coding companion problem, please see: Encode and Decode TinyURL. How would you design ...

  10. java8(2)--- Stream API

    1.简述 Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一 个就是 Stream API. Stream 是处理集合的抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复 ...