>>> django.VERSION (4, 1, 0, 'final', 0)
PS:基于前几章的进度进行修改
一、使用Django模板修改页面
- 上一章中,直接使用了
index_test.py
添加\修改了资源页面,这次使用模板
来添加资源页面\修改页面 - 先来看
index_test.py
文件,可以看到使用了模块django.http.HttpResponse()
来输出指定的信息:
#-*- coding: utf-8 -*- from django.http import HttpResponse def hello(request): return HttpResponse("Hello World!!!")
- 而上面的这种方式会将数据和视图混合在一起,不符合Django中的MTC思想,所以我们可以使用模板来输出数据:
- 根据上一章节中的项目结构,现在在helloworld项目目录下创建
templates
目录,然后创建test.html
文件 - 现在的目录结构如下:
- 下面是test.html模板文件的内容:
<h1>{{ hello }}</h1> #这里是变量,使用了双括号
- 下面向Django说明模板文件路径,修改helloworld容器目录下的
settings.py
文件:
import os #导入os模块 。。。。。。 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], #修改DIRS,说明模板文件的路径,BASE_DIR是manage.py文件所在的路径 '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', ], }, }, ]
- 现在修改
index_test.py
和urls.py
,增加一个新的对象,用于向模板提交数据
render()方法参数:
render(request, template_name, context=None, content_type=None, status=None, using=None)
request:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等
template_name:必要参数,设置模板文件名,用于生成网页内容
context:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典
content_type:响应内容的数据格式,一般情况下使用默认值即可
status:HTTP状态码,默认是200
using:设置模板引擎,用于解析模板文件、生成网页内容等
- index_test.py #-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): contest = {} contest['hello'] = 'Hello World!!!' return render(request,'test.html',contest) #指定模板文件
- urls.py #-*- coding: utf-8 -*- from django.urls import path from . import index_test urlpatterns = [ path('hello/',index_test.hello), ]
- 可以看到,我们这里使用了
render
来代替之前使用的HttpResponse
,render
使用了一个字典contest
作为参数,contest
字典中元素的键值hello
对应了test.html模板文件中{{ hello }}
变量
- 再次进行访问:
- 可以看到已经替换页面了,现在已经完成了使用模板来输出数据,实现数据与视图分离
二、Django模板标签
- 经过上面的实践,下面来看一下Django模板中常用的语法规则
- 变量
- 模板语法:
视图view:{"HTML变量名":"views变量名"} HTML:{{ 变量名 }}
- 可以看到其实也就是字典,跟上面那个一样
- 下面来看案例:
- 现在修改视图文件
index_test.py
文件,下面是变量和字典的写法,可以看到思路其实是一样的:
- 变量 # -*- coding: utf-8 -*- from django.shortcuts import render def Hello(request): test_view = "测试" hello_view = "你好" return render(request,'test.html',{"test":test_view,"hello":hello_view})
修改templates目录下的test.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> #页面名称 </head> <body> <p>{{ test }}</p> #导入两个变量 <h1>{{ hello }}</h1> </body> </html>
再次访问,成功修改!
- 列表
- templates中的test.html文件,可以使用
.
索引下标取出相对应的元素 - 下面来看案例:
- 修改视图文件
index_test.py
,相当于是把字典的值换成列表:
# -*- coding: utf-8 -*- from django.shortcuts import render def Hello(request): test_view = ["测试1号","测试2号","测试3号"] return render(request,'test.html',{"test":test_view})
修改test.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test }}</p> <p>{{ test.0 }}</p> #配合 . 可以根据列表下标调用元素 <p>{{ test.2 }}</p> </body> </html>
查看页面:
- 字典
- templates中的test.html文件,可以使用
.键
取出相对应的元素 - 下面来看案例:
- 修改视图文件
index_test.py
:
# -*- coding: utf-8 -*- from django.shortcuts import render def Hello(request): test_view = {"name":"测试","age":22} return render(request,'test.html',{"test":test_view})
- 修改
test.html
文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test }}</p> <h1>{{ test.name }}</h1> <h2>{{ test.age }}</h2> </body> </html>
- 查看页面: