本节我们继续使用《Django视图函数》一节中的“Hello_my_django”函数来完成相关知识的讲解。
from django.http import HttpResponse
def Hello_my_django(request):
return HttpResponse('<html><body>Hello my Django</body></html>')
虽然上面的函数也能够顺利完成响应任务,但是我们可以看出这个视图函数的 HTML 代码写在了 Python 定义的函数中。我们先思考一下,如果用以上方法来定义视图函数的话,它是否具有可行性呢?
有以下两点值得我们思考:
那么 Django 是如何实现视图函数与 HTML 代码解耦的呢?这就引出我们本节要讲解的知识——模板系统。
在 Django 中我们把“模板”称之为 Template,它的存在使得 HTML 和 View 视图层实现了解耦。 在《Django MTV和MVC的区别》一文中也提到过 Template,它是设计模式中的 T 层,那么它在 Djang 中又是如何应用的呢?
其实 T 层应用是这样实现,当创建好一个 Django 项目后,我们在项目的同级目录下创建一个名为 templates 文件夹,对它进行简单的配置后,这个文件夹将被 Django 自动识别。我们可以简单的理解为:文件夹就好比我们所说的 T 层,然而其复杂的实现过程由 Django 框架本身来实现的,所以我们无需关心内部细节。
下面我们对 Hello_my_django 函数进行一下改造,在 templates 文件中新建一个 HTML 文件,并且将此文件命名为 hello.html,然后在此文件中书写我们的 HTML 代码,如下所示:
写HTM代码:
<html><body>{{vaule}}</body></html>
写视图函数:
from django.shortcuts import render
def hello_my_django(request):
return render(request,"hello.html",{"vaule":"hello my Django"})
看完上述代码,你可会有些不理解,这属于正常现象,因为我们还有许多的知识未涉及到,继续看我们教程,你会很快理解它。对于上述代码,我们先通俗易懂的讲解一下。
hello.html 文件中的 {{vaule}} 是一个模板的变量,视图函数必须把数据形成字典的形式才可以传递给模板,这就是“模板传参”。
render 是 View 层加载模板的一种方式,它封装在 django.shortcuts 模块中,render 方法使用起来非常方便,它首先加载模板,然后将加载完成的模板响应给浏览器。
本节重点讲解了模板层与视图层的组合使用,也涉及了一些其他的知识,比如“模板的传参”和“render 方法”加载模板。当然,后续章节对这些知识点还会深入讲解。