MVC框架

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

MTV框架:

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

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

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

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

{{  }}和 {% %}

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

{{ 变量名 }}

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

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

举例:

view中的代码:

def test(request):name = 'alex'age = 83name_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 = nameself.age = agedef __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 datetimedate_now = datetime.datetime.now()  date_day = datetime.date()print('1111111', date_now)

模板中的代码:

{{ date_now|date:'Y-m-d H:i:s' }}<br>
{{ date_now}}{{ date_day}}

如果不想再模板后面加参数可以现在setting中进行设置,

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}}

转载于:https://www.cnblogs.com/yb635238477/p/9392544.html

django框架之模板系统相关推荐

  1. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  2. django框架运用--------股票系统

    django框架运用--------股票系统 这个系统是我和几个队友两天做出来的,可能功能方面没有实现太多,但足够体现django框架的运用,我是主要负责后端,所以这里只讲一下后端的代码. 创建dja ...

  3. Django框架的模板层详解

    目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...

  4. python的django框架与springboot_Python系统教学|为什么Django框架在Python开发很重要?...

    Django框架在Python开发很重要,Django框架是一个web框架,且是一个后端框架程序,它不是服务器,需要注意Django框架帮我们封装了很多的组件,帮助我们实现各种功能,具有很强的扩展性. ...

  5. 基于django的web模板系统

    1    django模板系统介绍 1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便            2,其次 ...

  6. python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告

    python景区购票系统毕设 django景区购票系统毕设 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发 ...

  7. python毕业设计作品基于django框架校园网站系统毕设成品(7)中期检查报告

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...

  8. python毕业设计作品基于django框架校园网站系统毕设成品(3)后台管理功能

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...

  9. python毕业设计作品基于django框架校园网站系统毕设成品(4)开题报告

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...

最新文章

  1. Android 自定义view时用到的TypedArray
  2. jQuery父级以及同级元素查找
  3. 跨站点请求伪造(CSRF)总结和防御
  4. 使用CDS view开发SAP Marketing contact的facet追溯工具
  5. python规模_python语言计算生态规模有多大?
  6. Oracle 11g DRCP连接方式——基本原理
  7. python函数返回的元组_python – 从函数返回一个单独的元组元组
  8. 实训09.09:简单的彩票系统(注册信息)
  9. Xposed框架安装失败
  10. csgo删除服务器地图在哪个文件夹,CSGO de_cache地图
  11. win10安装solidworks 注册机闪退的问题,转自知乎
  12. 二十一条自动化测试过程中遭遇的问题及解决思路
  13. Scheme语言 入门语法
  14. 若依管理系统漏洞利用
  15. keil5中输入中文并且美化字体
  16. 判断入射满射c语言编码,数学上可以分三类函数包括() 答案:单射双射满射...
  17. 认识Python继承:super()
  18. android新浪微博改进版
  19. [Qt]使用QSS的扁平化风格的小作业—— 附源码
  20. Spark Transformation转换算子和Action行动算子

热门文章

  1. 前端如何实现网络速度测试功能_如何通过fiddler的断点功能,来实现不同场景的测试...
  2. redis 远程主机强迫关闭了一个现有的连接_如何在 Debian 10 上安装和配置 Redis 服务...
  3. 家有路由器,为什么会出现网络拒绝接入而无法上网的情况呢?
  4. 利息高的贷款通过率会高一些吗?
  5. 女生长胖是一种什么样的体验?
  6. 为什么南派三叔要封笔?
  7. 镇定的反义词是什么,标准答案是
  8. 一个人生活可以多痛快
  9. 30岁以后的人生,如何来逆袭?
  10. 电脑主机换了什么东西才需要重新安装系统?