您现在的位置是:网站首页> 编程资料编程资料
Django框架模板用法详解_python_
2023-05-26
354人已围观
简介 Django框架模板用法详解_python_
在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!"。该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想。
本章节我们将为大家详细介绍 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容。
一、模板应用实例
我们接着上一章节的项目将在 HelloWorld 目录底下创建 templates 目录并建立 runoob.html文件,整个目录结构如下:
HelloWorld/ |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- settings.py | |-- settings.pyc | |-- urls.py | |-- urls.pyc | |-- views.py | |-- views.pyc | |-- wsgi.py | `-- wsgi.pyc |-- manage.py `-- templates `-- runoob.html
runoob.html 文件代码如下:
{{ hello }}
从模板中我们知道变量使用了双括号。
接下来我们需要向Django说明模板文件的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",],如下所示:
...TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+"/templates",], # 修改位置 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] ...我们现在修改 views.py,增加一个新的对象,用于向模板提交数据:
from django.shortcuts import render def runoob(request): context = {} context['hello'] = 'Hello World!' return render(request, 'runoob.html', context)urls.py 文件代码:
from django.urls import path from . import views urlpatterns = [ path('runoob/', views.runoob), ]可以看到,我们这里使用 render 来替代之前使用的 HttpResponse。render 还使用了一个字典 context 作为参数。
context 字典中元素的键值 hello 对应了模板中的变量 {{ hello }}。
再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。
接下来我们将具体介绍模板中常用的语法规则。
二、Django 模板标签
1、变量
模板语法:
view:{"HTML变量名" : "views变量名"} HTML:{{变量名}}
from django.shortcuts import render def runoob(request): views_name = "菜鸟教程" return render(request,"runoob.html", {"name":views_name})templates 中的 runoob.html :
{{ name }}

再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

2、列表
templates 中的 runoob.html中,可以用 . 索引下标取出对应的元素。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): views_list = ["菜鸟教程1","菜鸟教程2","菜鸟教程3"] return render(request, "runoob.html", {"views_list": views_list})HelloWorld/templates/runoob.html 文件代码:
{{ views_list }}
# 取出整个列表{{ views_list.0 }}
# 取出列表的第一个元素
再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

3、字典
templates 中的 runoob.html中,可以用 .键 取出对应的值。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): views_dict = {"name":"菜鸟教程"} return render(request, "runoob.html", {"views_dict": views_dict})HelloWorld/templates/runoob.html 文件代码:
{{ views_dict }}
{{ views_dict.name }}
再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

4、过滤器
模板语法:
{{ 变量名 | 过滤器:可选参数 }}模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
{{ name|lower }}{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。
过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|upper }}以上实例将第一个元素并将其转化为大写。
有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:
{{ bio|truncatewords:"30" }}这个将显示变量 bio 的前30个词。
其他过滤器:
- addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
- date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
{{ pub_date|date:"F j, Y" }}- length : 返回变量的长度。
(1)default
default 为变量提供一个默认值。
如果 views 传的变量的布尔值是 false,则使用指定的默认值。
以下值为 false:
0 0.0 False 0j "" [] () set() {} NoneHelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): name =0 return render(request, "runoob.html", {"name": name})HelloWorld/templates/runoob.html 文件代码:
{{ name|default:"菜鸟教程666" }}再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

(2)length
返回对象的长度,适用于字符串和列表。
字典返回的是键值对的数量,集合返回的是去重后的长度。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): name ="菜鸟教程" return render(request, "runoob.html", {"name": name})HelloWorld/templates/runoob.html 文件代码:
{{ name|length}}再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

(3)filesizeformat
以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)。
字典返回的是键值对的数量,集合返回的是去重后的长度。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): num=1024 return render(request, "runoob.html", {"num": num})HelloWorld/templates/runoob.html 文件代码:
{{ num|filesizeformat}}再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

(4)date
根据给定格式对一个日期变量进行格式化。
格式 Y-m-d H:i:s返回 年-月-日 小时:分钟:秒 的格式时间。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): import datetime now =datetime.datetime.now() return render(request, "runoob.html", {"time": now})HelloWorld/templates/runoob.html 文件代码:
{{ time|date:"Y-m-d" }}再次访问 http://127.0.0.1:8000/runoob,可以看到页面:

(5)truncatechars
如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。
截断的字符串将以 ... 结尾。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): views_str = "菜鸟教程" return render(request, "runoob.html", {"views_str": views_str})HelloWorld/templates/runoob.html 文件代码:
{{ views_str|truncatechars:2}}再访问访问 http://127.0.0.1:8000/runoob,可以看到页面:

(6)safe
将字符串标记为安全,不需要转义。
要保证 views.py 传过来的数据绝对安全,才能用 safe。
和后端 views.py 的 mark_safe 效果相同。
Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import render def runoob(request): views_str = "pandas如何获取某个数据的行号_python_
python进程池Pool中apply方法与apply_async方法的区别_python_
python array中关于[a,b,c]的使用方式_python_
Python进程multiprocessing.Process()的使用解读_python_
selenium常用API的使用过程记录(包括自动登录)_python_
Python使用multiprocessing如何实现多进程_python_
