Django框架简介

MVC框架和MTV框架

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

想要更详细的了解MVC模式? >> 点我

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

Django的MTV模式

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

Template(模版):负责如何把页面展示给用户

View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

Django框架图示

Django模板系统

官方文档

常用语法

Django模板中只需要记两种特殊符号:

{{  }}和 {% %}

{{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作。

变量

{{ 变量名 }}

变量名由字母数字和下划线组成。

点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。

几个例子:

view中代码:

 
  1. def template_test(request):
  2. l = [11, 22, 33]
  3. d = {"name": "alex"}
  4.  
  5. class Person(object):
  6. def __init__(self, name, age):
  7. self.name = name
  8. self.age = age
  9.  
  10. def dream(self):
  11. return "{} is dream...".format(self.name)
  12.  
  13. Alex = Person(name="Alex", age=34)
  14. Egon = Person(name="Egon", age=9000)
  15. Eva_J = Person(name="Eva_J", age=18)
  16.  
  17. person_list = [Alex, Egon, Eva_J]
  18. return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
 

模板中支持的写法:

 
  1. {# l中的第一个参数 #}
  2. {{ l.0 }}
  3. {# 取字典中key的值 #}
  4. {{ d.name }}
  5. {# 取对象的name属性 #}
  6. {{ person_list.0.name }}
  7. {# .操作只能调用不带参数的方法 #}
  8. {{ person_list.0.dream }}
 

注:当模板系统遇到一个(.)时,会按照如下的顺序去查询:

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

Filters

翻译为过滤器,用来修改变量的显示结果

语法: {{ value|filter_name:参数 }}

'|'左右没有空格没有空格没有空格

default  

  1. {{ value|default:"nothing"}}

如果value值没传的话就显示nothing

注:TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用。

filesizeformat

将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:

  1. {{ value|filesizeformat }}

如果 value 是 123456789,输出将会是 117.7 MB。

add

给变量加参数

  1. {{ value|add:"2" }}

value是数字4,则输出结果为6。

  1. {{ first|add:second }}

如果first是 [1,.2,3] ,second是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6] 。

lower

小写

  1. {{ value|lower }}

upper

大写

  1. {{ value|upper}}

title

标题

  1. {{ value|title }}

ljust

左对齐

  1. "{{ value|ljust:"10" }}"

rjust

右对齐

  1. "{{ value|rjust:"10" }}"

center

居中

  1. "{{ value|center:"15" }}"

length

{{ value|length }}

返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

slice  

切片

  1. {{value|slice:"2:-1"}}

first

取第一个元素

  1. {{ value|first }}

last

取最后一个元素

  1. {{ value|last }}

join

使用字符串拼接列表。同python的str.join(list)。

  1. {{ value|join:" // " }}

truncatechars

如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

参数:截断的字符数

  1. {{ value|truncatechars:9}}

date

日期格式化

  1. {{ value|date:"Y-m-d H:i:s"}}

可格式化输出的字符:点击查看

safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

比如:

value = "<a href='#'>点我</a>"

  1. {{ value|safe}}

自定义filter

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值 - -不一定是一个字符串
  • 参数的值 - 这可以有一个默认值,或完全省略

例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”

自定义filter代码文件摆放位置:

 
  1. app01/
  2. __init__.py
  3. models.py
  4. templatetags/ # 在app01下面新建一个package package
  5. __init__.py
  6. app01_filters.py # 建一个存放自定义filter的py文件
  7. views.py
 

编写自定义filter

 
  1. from django import template
  2. register = template.Library()
  3.  
  4. @register.filter
  5. def fill(value, arg):
  6. return value.replace(" ", arg)
  7.  
  8. @register.filter(name="addSB")
  9. def add_sb(value):
  10. return "{} SB".format(value)
 

使用自定义filter

 
  1. {# 先导入我们自定义filter那个文件 #}
  2. {% load app01_filters %}
  3.  
  4. {# 使用我们自定义的filter #}
  5. {{ somevariable|fill:"__" }}
  6. {{ d.name|addSB }}
 

模板测试:

views.py

 
  1. from django.shortcuts import render,HttpResponse,redirect
  2. import datetime
  3.  
  4. # Create your views here.
  5.  
  6. def exp(request):
  7. lis = ["哈哈","嘿嘿","啦啦"]
  8. dic = {
  9. "name" : "郝旭",
  10. "age" : 21,
  11. "job" : "IT"
  12. }
  13. kong = []
  14. filesize = 2048
  15. a = 9
  16. lis1 = [1,2,3]
  17. lis2 = [4,5,6]
  18. b = "RISITANIANGA"
  19. string = "我是最棒的"
  20. long_str = "qwertyuiopasdfghjklzxcvbnm"
  21. data_now = datetime.datetime.now()
  22. # print(time.strftime("%Y-%m-%d %H:%M:%S"))
  23. class Person(object):
  24. def __init__(self,name,age,job):
  25. self.name = name
  26. self.age = age
  27. self.job = job
  28. def dream(self):
  29. return "{} is dream...".format(self.name)
  30. def __str__(self):
  31. return "{}".format(self.name)
  32. #python2中的方法:
  33. def __unicode__(self):
  34. return "{}".format(self.name)
  35. __repr__=__str__
  36.  
  37. a1 = Person("郝大爷",21,"IT")
  38. a2= Person("郝叔叔",21,"程序猿")
  39. a3 = Person("好爸爸",21,"工程师")
  40. person_list = [a1,a2,a3]
  41. return render(request,
  42. "exp.html",
  43. {"lis":lis,"dic":dic,"person_list":person_list,"kong":kong,
  44. "filesize":filesize,"a":a,"lis1":lis1,"lis2":lis2,"b":b,"string":string,
  45. "long_str":long_str,"data_now":data_now,'js': """<script>
  46. for(var i=0;i<5;i++){
  47. alert('123')
  48. }
  49. </script>""",
  50. 'a_html': '<a href="https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#date">点击</a>',
  51. "a1":a1}
  52. )
 

urls.py

 
  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from app01 import views
  4.  
  5. urlpatterns = [
  6. url(r'^admin/', admin.site.urls),
  7. url(r'^exp/', views.exp),
  8. ]
 

自定义filters:

exp.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>模板测试</title>
  6. </head>
  7. <body>
  8. {{ lis.0 }}
  9. <hr>
  10. {{ lis.2 }}
  11. <hr>
  12. {{ lis }}
  13. <hr>
  14. {% for num in lis %}
  15. {{ num }}
  16. {% endfor %}
  17. <hr>
  18. {{ dic.name }}
  19. <hr>
  20. {{ dic.keys }}
  21. {{ dic.values }}
  22. {{ dic.items }}
  23. <hr>
  24. {% for key,value in dic.items %}
  25. {{ key }}:{{ value }}
  26. {% endfor %}
  27. <hr>
  28. {{ person_list.0.name }}
  29. {{ person_list.1.job }}
  30. {{ person_list.2.name }}
  31. <hr>
  32. {{ person_list.0.dream }}
  33. <hr>
  34. {{ kong|default:"nothing" }}
  35. <hr>
  36. {{ kongkong|default:"nothing" }}
  37. <hr>
  38. {{ filesize|filesizeformat }}
  39. <hr>
  40. {{ a|add:"1" }}
  41. <hr>
  42. {{ lis1|add:lis2 }}
  43. <hr>
  44. {{ b|lower|title }}
  45. <hr>
  46. <p>{{ string|center:"30" }}</p>
  47. <hr>
  48. {{ string|length }}
  49. <hr>
  50. {{ lis|slice:"-1:-3:-1" }}
  51. <hr>
  52. {{ string|first }}
  53. <hr>
  54. {{ lis|join:"_" }}
  55. <hr>
  56. {{ long_str|truncatechars:"9" }} {#截断#}
  57. <hr>
  58. {{ data_now|date:"Y-m-d H:i:s" }} {# 日期格式化 #}
  59. <hr>
  60. {{ js|safe }}
  61. <hr>
  62. {{ a_html|safe }}
  63. <hr>
  64. {{ a1 }}
  65. <hr>
  66. {{ person_list.0 }}
  67. <hr>
  68. {% load my_filters %}
  69. {{ a1.name|my_filters:"好" }}
  70. <hr>
  71. {{ a1.name }}
  72. <hr>
  73. {{ person_list }} {# 通过列表会调用类中的__repr__方法,还是会显示对象的地址,并不会显示对象.name,所以要加上__repr__=__str__ 可另行更改__repr__#}
  74. <hr>
  75. {{ a1 }}
  76. </body>
  77. </html>
 

Django框架简介及模板Template,filter的更多相关文章

  1. Python学习(三十)—— Django框架简介

    转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...

  2. Django框架简介与使用注意事项

    一.Django框架简介 MVC框架和MTV框架 MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model). ...

  3. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  4. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  5. wsgiref模块、web框架、django框架简介

    """web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...

  6. Django框架简介,wsgiref 与 jinja2 模块

    目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...

  7. Django框架简介-开头

    一.MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制 ...

  8. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

  9. Django框架简介(1)

    目录 手写web框架 基于wsgiref模块写web服务端框架 python三大主流框架 django框架介绍 注意事项 django下载方法 django项目及app的创建 命令行创建项目 pych ...

随机推荐

  1. corn表达式 经典

    https://www.cnblogs.com/GarfieldTom/p/3746290.html

  2. ACM学习大纲(转)

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

  3. 记住,永远不要在MySQL中使用“utf8”-转

    http://www.infoq.com/cn/articles/in-mysql-never-use-utf8-use-utf8 最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的M ...

  4. shiro 配置拦截规则之后css和js等失效

    使用shiro作为平台的权限管理工具,shiro的配置文件如下: package com.ros.config; import java.util.LinkedHashMap;import java. ...

  5. 推荐一个yaml文件转json文件的在线工具

    YAML的全称是YAML Ain't Markup Language,是一种简洁的非标记语言,以数据为中心,使用空白,缩进,和分行组织数据,从而使得表示更加简洁易读. YAML如今广泛应用于微服务开发 ...

  6. 机器学习之-奇异值分解(SVD)原理详解及推导

    转载 http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充 ...

  7. 原生js格式化json的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. spfa模板+讲解

    zz http://blog.sina.com.cn/s/blog_6ad20aef0100mc1a.html Spfa算法 (模板源代码) 这是Bellman Ford的改进算法.    算法介绍: ...

  9. maven项目在myeclipse中不出现Maven Dependencies 和maven标识的解决方法

    这种情况通常出现在 我们新加载了一个 maven的项目,但是myeclipse没识别到. 或者说 我们把该项目修改成了maven项目--------也就是说该项目 有了pom.xml 但是还没有mav ...

  10. vue for循环中常见问题 之 求和(合计)

    例:求后台返回数据this.dataInfo 中某个字段(item.totalSum)的和,只需添加computed,然后模板中直接可以使用totalSumAll (不需要再data中声明) comp ...