django框架之模板系统
Posted yb635238477
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django框架之模板系统相关的知识,希望对你有一定的参考价值。
MVC框架
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
MTV架构:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
Django模板中只需要记两种特殊符号:
{{ }}和 {% %}
{{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作
{{ 变量名 }}
变量名由字母数字和下划线组成。
点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。
举例:
view中的代码:
def test(request): name = ‘alex‘ age = 83 name_list = [‘和尚‘,‘阿三‘,‘阿瑟东‘,‘独家‘] return render(request,‘test.html‘,{ ‘name‘:name, ‘age‘:age, ‘name_list‘:name_list, })
模板中的代码:
<p>{{ name }}</p> <p>{{ age }}</p> <p>{{ name_list }}</p> <ul> {% for name in name_list %} <li>{{ name }}</li> {% endfor %} </ul> <hr> {{ name_list.0 }} {{ name_list.1 }} {{ name_list.2 }} {{ name_list.3 }}
列表中的名字可以通过for循环取出,也可以用 . 索引 取出。
字典中的名字是通过 . key 取出 ,也可以通过for循环取
例子:
views中的代码:
name_dict = { ‘name1‘: ‘和尚‘, ‘name2‘: ‘和尚贼秃‘, ‘name3‘: ‘杜标‘, ‘name4‘: ‘杜菊飞‘, }
模板html的代码:
{{ name_dic }}
{{ name_dic.name1 }}
{{ name_dic.name2 }}
{{ name_dic.name3 }}
{% for i in name_dic.values %}
{{ i }}
{% endfor %}
{% for key,value in name_dic.items %}
{{ key }}:{{ value }}
{% endfor %}
也可以将类渲染到模板中,类的取值可以通过调用 类.属性名或方法名 来获取值。例子:
views中的代码:
class Person(object): def __init__(self,name,age): self.name = name self.age = age def __str__(self): return ‘<Person object: {}>‘.format(self.name) def dream(self): return ‘{}我想带你去浪漫的西二旗,然后一起去上地做面试题,其实我比较喜欢望京西‘.format(self.name) def __repr__(self):
return ‘<Person object: {}>‘.format(self.name)
def test(request): p1 = Person(‘alex‘,22) p2 = Person(‘qwer‘,25) return render(request,‘test.html‘,{ ‘p1‘:p1, ‘p2‘:p2,
P_list = [p1,p2] })
模板中的代码:
{{ p1 }} {{ p1.name }} {{ p1.age }} {{ p1.dream }} <br> {{ p2 }}
这里插入一个小知识:
class中 __init__方法和__repr__方法的区别:
如果是直接调用类中的属性或方法,则用的是__init__方法,如果是程序调用类中的属性或方法,就用的是__repr__方法,上述代码中,如果将p1,p2放在列表中,通过P_list列表调用类的属性或方法,就调用的是__repr__方法。在python2中__repr__的方法叫做__unicode__。
Filters:
翻译为过滤器,用来修改变量的显示结果。
语法: {{ value|filter_name:参数 }}
‘|‘左右没有空格没有空格没有空格
default
{{ value|default:"nothing"}}
注:TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:‘找不到‘,可以替代default的的作用
例子:
{{ qwer|default:‘没有传这个值,使用默认值‘ }}
filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 ‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘, 等等)。例如:
views代码:
file_size1 = 1024
file_size2 = 1024*1024
模板中的代码:
{{ file_size1|filesizeformat }}
{{ file_size2|filesizeformat }}
add
给变量加参数
{{ value|add:"2" }}
value是数字4,则输出结果为6。
{{ first|add:second }}
如果first是 [1,.2,3] ,second是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6] 。
lower
小写
{{ value|lower }}
upper
大写
{{ value|upper}}
title
标题
{{ value|title }}
ljust
左对齐
"{{ value|ljust:"10" }}"
rjust
右对齐
"{{ value|rjust:"10" }}"
center
居中
"{{ value|center:"15" }}"
length
{{ value|length }}
返回value的长度,如 value=[‘a‘, ‘b‘, ‘c‘, ‘d‘]的话,就显示4.
slice
切片
{{value|slice:"2:-1"}}
first
取第一个元素
{{ value|first }}
last
取最后一个元素
{{ value|last }}
join
使用字符窜拼接列表。同python的str.join(list)。
{{ value|join:" // " }}
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:截断的字符数
{{ value|truncatechars:9}}
date
日期格式化
view中的代码:
import datetime date_now = datetime.datetime.now() print(‘1111111‘, date_now)
模板中的代码:
{{ date_now|date:‘Y-m-d H:i:s‘ }}<br> {{ date_now}}
safe
views代码:
value = "<a href=‘#‘>点我</a>"
模板中的代码:
{{ value|safe }}
{{ value }}
自定义filter:
自定义过滤器只是带有一个或两个参数的Python函数:
- 变量(输入)的值 - -不一定是一个字符串
- 参数的值 - 这可以有一个默认值,或完全省略
例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”
在app01下面新建一个package,名字必须为templatags,然后再这个文件夹下新建一个py文件,然后就在这个py文件里写自己的filter过滤器。
from django import template register = template.library() @register.filter #如果后面有name参数:@register.filter(name=‘sb‘),
#就相当于给add_sb的过滤器起了个别名,那么在模板中使用的时候,就要用sb这个别名。
def add_sb(value,arg): return ‘{}_{}_sb‘.format(value,arg)
然后再模板中,先导入自己定义的myfilters文件,然后取值:
{%load myfilters%} {{name_list.0|add_sb:‘就是‘}} #@register.filter(name=‘sb‘)使用name参数后,就应该写成
#{{name_list.0|sb:‘就是‘}}
#如果给arg赋上值,模板中就不需要写参数了
{{name_list.1|add_sb}}
以上是关于django框架之模板系统的主要内容,如果未能解决你的问题,请参考以下文章