django视图解析
MTV大致的工作流程是:
用户提交Http请求到WSGI,WSGI将请求变成URL,并且给到Web框架的路由模块,路由模块将URL与特定的view函数相关联,views特定的函数此时会选取特定的templates模板,经过templates的渲染后将渲染后的模板提交到浏览器。
在进行实际的工程时,模板templates需要我们手工创建目录。
这时手工创建templates目录的位置存放有两种方法:
1、存放在应用目录下
在我的例子中,myproject是项目工程,myapp是应用,此时templates的目录为:myapp/templates
建立好templates后,便可以在templates目录建立返回用户的Html页面,代码可为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是一个测试</title>
</head>
<body>
<p style="font-size:20px;font-family:arial">{{test}}</p>
<p style="color:red"><br style="color:red"/>这是个测试</p>
</body>
</html>
在创建Html文件前,最好将其放在新建myapp文件内(当然其他名字也可以),此时的目录为:
这样做是因为Django 将会选择第一个匹配的模板文件,如果你有一个模板文件正好和另一个应用中的某个模板文件重名,Django 没有办法区分它们。我们需要帮助 Django 选择正确的模板,最好的方法就是把他们放入各自的命名空间中,也就是把这些模板放入一个和 自身应用重名的子文件夹里。
做好返回用户的页面后,去myapp下的views视图文件建立连接:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
context = {
'test': 'hello, man!'
}
return render(request, 'myapp/index.html', context)
在做好视图后,再配置相应的本地路由跟全局路由就可以了,然后在浏览器上运行,可看到:
2、存放在工程的目录下
此时的templates目录为:
在myapp目录下新建文件results.html的代码为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p style="font-size:20px;font-family:arial">{{test}}</p>
<p style="color:red"><br style="color:red"/>这是一个templates建立在工程下的测试</p>
</body>
</html>
修改views,新增了一个results函数:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
context = {
'test': 'hello, man!'
}
return render(request, 'myapp/index', context)
def results(request):
context = {
'test': 'hello, man!'
}
return render(request, 'myapp/results.html', context)
在配置好相关路由后,进行一个不可或缺的步骤,那就是在settings里面配置模板路径:
在DIRS里添加上templates,这样系统就能找到正确找到results文件了。
最后运行浏览器:
这两种建立templates的方式都可以采用,不过我比较喜欢用第一种方法,因为比较省事,不用修改setting文件,前提是激活了应用,这样系统就能找到正确的文件路径了。
根据官方文档说法,第一种方法不用配置setting文件是因为默认的设置文件设置了 DjangoTemplates 后端,并将 APP_DIRS 设置成了 True。这一选项将会让 DjangoTemplates 在每个 INSTALLED_APPS 文件夹中寻找 “templates” 子目录。
第二种方法新建的templates不在应用的目录下,所以需要修改setting文件。