在本教程中,我们将探讨如何用Django的模板来渲染HTML。Django是用Python编写的,与PHP等的工作方式不同。在PHP中,我们可以将PHP与HTML混合起来输出网页。Django和Python的工作方式有些不同。在Django中,我们使用Django模板语言或DTL模板,将Python和Django生成的动态数据输出到HTML页面。在之前的教程中,我们跳过了使用模板,只是直接从视图函数返回HTTP响应。现在我们要看看如何使用视图函数来渲染模板。
添加一个模板目录
要在我们的项目中开始使用模板,我们首先需要一个地方来放置它们。这将是一个模板目录,它位于项目根目录下。在我们的例子中,项目根目录是外部djangoblog目录。内部的djangoblog目录是我们的根应用程序。现在让我们来创建这个目录。

创建HTML文件
在templates目录下,我们将添加两个Html文件。一个是home.html,另一个是about.html。这些将是我们现在渲染的模板,而不是直接从我们的视图函数发回HttpResponse。

一旦这些文件被创建,我们可以把一些简单的Html标记放进去,就像这样。
templates/home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>The Home Page</title>
<h1>Home Page!</h1>
<h3>Hi there, thanks for visiting the home page!</h3>
</head>
<body>
</body>
</html>
templates/about.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>The About Page</title>
<h1>About Page!</h1>
<h3>Here you can learn all kinds of things about Django!</h3>
</head>
<body>
</body>
</html>
更新views.py
在这一步,我们将从视图函数返回HttpResponse对象改为在视图函数中渲染我们的新模板文件。这是当前的views.py文件。
from django.http import HttpResponse
def home(request):
return HttpResponse('<h1>The Home Page!</h1>')
def about(request):
return HttpResponse('<h1>About!</h1>')
下面是我们要对views.py进行这些修改的方法。
djangoblog/views.py
from django.http import HttpResponse
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
def about(request):
return render(request, 'about.html')
在上面views.py的新迭代中,突出显示的几行现在使用[render()]函数。这个函数可以接受三个参数,但在我们的例子中,我们只传递了两个参数。第一个参数是 HTTP 请求本身。第二个参数是要渲染的Html模板。在未来的教程中,我们将研究如何使用第三个参数。第三个参数可以是一个[字典],所以你可以从视图中传递动态数据到模板。
配置模板设置
在我们可以在浏览器中试用之前,我们需要在Django的settings.py文件中配置模板设置。如果我们不采取这一步骤,我们会得到一个类似的错误。
TemplateDoesNotExist at /
home.html请求方法。GET
Request URL: http://localhost:8000/
Django Version: 3.0.3
Exception Type:TemplateDoesNotExist
异常值。home.html
因此,让我们打开djangoblog/settings.py,配置一下我们的模板位置。找出这段代码。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
然后修改代码以符合下面这个例子。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['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',
],
},
},
]
现在我们可以测试一下 **/**和 **/about**路线,看看它们会产生什么结果。
主页

关于页面

Django HTML页面总结
这是一些很好的渐进式改进!通过这段代码,我们从视图函数直接向浏览器返回响应,到现在让视图函数渲染一个Html模板以获得更好的结果。