Django 框架简介
一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命周期成本低结构:模型(Model) 与数据库相关 存取数据视图(View) 处理业务逻辑 展示信息控制器(Controller) 获取用户信息 给模型传递指令2.Django的MTV 全名Model Template View 借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。结构:模型(Model) 负责业务对象与数据库的对象(ORM)模板(Template) 负责如何把页面展示给用户视图(view) 负责业务逻辑,并在适当的时候调用Model和TemplateDjango还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和TemplateDjango模板系统
常用语法:Django模板中有两种特殊符号{ {}} 表示变量,在模板渲染的时候替换成值,{%%} 表示逻辑相关的操作{ {变量名}} 变量名由字母数字和下划线组成点 (.) 在模板语言中有特殊含义,用来获取对象的相应属性值.
views中代码如下:
def test(request): l=[11,22,33] d={'name':'alex'} class Person(object): def __init__(self,name,age): self.name=name self.age=age def dream(self): return "{} isdreaming to be poorer".format(self.name) Alex=Person(name='a',age=3000) Egon = Person(name="Egon", age=9000) Eva_J = Person(name="Eva_J", age=18) per_list=[Alex,Egon,Eva_J] return render(request,'test.html',{'l_list':l,'d':d,'per_list':per_list})html中:{ { l_list.1 }} --> 22{ { d.name }} -->alex{ { per_list.0.name }} -->取索引为0的对象的name属性{ { per_list.0.dream }} -->取索引为0的对象的dream属性 ( .操作只能调用不带参数的方法) 注意: 当模板系统遇到一个(.)时,会按照如下的顺序去查询 1.在字典中查询 2.属性或方法 3.数字索引 Filters 过滤器,用来修改变量的显示结果。语法: {
{value|filter_name:参数}}'|'左右没有空格没有空格没有空格1.default { {value|default:"nothing"}} 如果value值没传的话就显示nothing 如value是以下几种:none {} [] () "".注意: TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用。2.filesizeformat 将值格式化为一个 “人类可读的” 文件尺寸 { { value|filesizeformat }} 如果 value 是 123456789,输出将会是 117.7 MB。3.add给变量加参数数字{ {value|add:'2'}} { { n|add:"2"}} ----6 n=4列表{ { l_list|add:s }} l_list=[11,22,33] s=[1,3,4]}}----[11, 22, 33, 1, 3, 4]4.lower 小写 { { value|lower }}5.upper 大写 { {value|upper}}6.title 标题 { {value|title}}7.ljust 左对齐 { { value|lower }} p标签8.rjust 右对齐 { { value|rjust:"10" }} p标签9.center 居中 { { value|center:"15" }} p 标签10.length { {value|length}} 返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.11.slice 切片 { {value|slice:"2:-1"}}12.first 取第一个元素 { {value|first}}13.last 取最后一个元素 { { value|last }}14.join 使用字符串拼接列表。同python的str.join(list)。 { { value|join:" // " }}15.truncatechars 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。 参数:截断的字符数 { { value|truncatechars:9}} 加上...一共显示九个16.date 日期格式化 { { value|date:"Y-m-d H:i:s"}} views: import datetime time=datetime.datetime.now()17.safe Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。 但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统, 后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本, 如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式, 如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。 views : 'a_html': '<a href="https://www.baidu.com/">点击</a>' { { a_html|safe }} 可以点击 自定义filter自定义过滤器只是带有一个或两个参数的python函数 变量(输入)的值 - -不一定是一个字符串 参数的值 - 这可以有一个默认值,或完全省略 在过滤器{ {var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”。自定义的filter代码文件摆放位置 app名 /templatetags 在app下新建一个package / 建一个存放自定义filter 的py文件编写自定义filter from django import template register=template.Library()@register.filter 一定要加 一定要加
def fill(value,arg): return value.replace("",arg) @register.filter(name="addSB") def add_sb(value): return "{}SB".format(value)使用自定义 {# 先导入我们自定义filter那个文件 #} {% load app01_filters %}{# 使用我们自定义的filter #}
{ { somevariable|fill:"__" }} { { d.name|addSB }}