使用 Django 开发 Web 应用,应该遵循 MVC 思想,需要将业务逻辑和视图进行分离。Django 模板就是 MVC 中的 View 部分。
本章将介绍 Django 模板的使用,模板的内容是纯文本,用于分离视图的表现形式和内容。
1. 模板应用范例
我们接着上一章节的项目将在 blog 目录底下创建 templates 目录并建立 codebaoku.html文件,整个目录结构如下:
(secker381) xinpingdeMacBook-Pro:blog xinping$ tree
.
├── blog
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-38.pyc
│ │ ├── settings.cpython-38.pyc
│ │ ├── urls.cpython-38.pyc
│ │ └── wsgi.cpython-38.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
└── templates
└── codebaoku.html
codebaoku.html 文件代码如下:
blog/templates/codebaoku.html 文件代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>codebaoku</title>
</head>
<body>
<h1>{{ hello }}</h1>
</body>
</html>
从模板中我们知道变量使用了双括号。
接下来我们需要向Django说明模板文件的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, 'templates')],如下所示:
blog/blog/settings.py 文件代码:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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,增加一个新的对象,用于向模板提交数据:
blog/blog/views.py 文件代码:
from django.shortcuts import render
def codebaoku(request):
context = {}
context['hello'] = 'Hello World!'
return render(request, 'codebaoku.html', context)
可以看到,我们这里使用 render 来替代之前使用的 HttpResponse。render 还使用了一个字典 context 作为参数。
context 字典中元素的键值 hello 对应了模板中的变量 {{ hello }}。
再次访问 http://127.0.0.1:8000/codebaoku , 可以看到页面:
这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。
接下来我们将具体介绍模板中常用的语法规则。