模板
成功将数据在首页显示之后,就要考虑如何在首页中展示这些数据,在 django 中,就是由模板(Template)决定如何向用户展示数据的。
模板系统
之前仅仅只是将取出的数据在首页展示出来,而用户肯定不希望只看到干巴巴的一串字符串,所以就需要一个合理的方式,比如一个好看的页面。要改变页面的样子,可以使用模板系统。
模板系统将页面的设计从 python 代码中独立出来,只需要我们将事先写好的代码(模板文件)放到指定位置,django 就会在需要的时候加载这个文件,并向其传递一个字典,字典中的是模板需要变量,最后生成一个HttpResponse
对象,返回给浏览器。这一过程 django 提供了一个函数render
,只需要将之前的视图函数修改一下就好
视图函数
# blog/views.py
from django.shortcuts import render
from .models import Category, Article
def index(request):
article = Article.objects.get(title='白云谣')
# 注意这里的列表已经改为字典
list = {
article.title,
article.author,
article.abstratc,
article.category,
article.create_time
}
return render(request, 'blog/index.html', context=list)
-
render()
函数第一个参数是 django 封装好的请求 -
render()
第二个参数是模板文件,django 将在目录中找到这个文件并加载 -
render()
第三个参数是一个字典,存放了传递给模板的变量
模板文件
模板文件需要事先写好,并放在指定位置。首先在manage.py
文件同级目录下创建一个templates
目录,再在templates
中创建blog
目录来存放blog
应用的模板文件,接下来在templates/blog/
中创建index.html
文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>fbckf</title>
</head>
<body>
<ul>
<li>{{ title }}</li>
<li>{{ author }}</li>
<li>{{ time }}</li>
<li>{{ abstract }}</li>
<li>{{ category }}</li>
</ul>
</body>
其实模板文件就是一个 HTML 文件,但其中与 HTML 文件不同的地方就在于 {{ title }} {{ time }}
这些由花括号括起来的变量,这就是 django 规定的模板变量,在渲染的时候,django 会用从视图函数接收到的字典中的变量进行替换。
配置
更新配置文件指定模板文件的目录
# fbckf/settings.py
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# DIRS 指定模板目录
'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',
],
},
},
]
...
指定模板目录之后,每次 django 会在指定目录中搜索指定模板文件加载
BASE_DIR
是配置文件中定义好的项目根目录os.path.join()
函数拼接出templates
目录的地址
刷新页面
总结
templates
目录不一定要放在项目根目录中,也可以放到各个应用的目录中。需要做的步骤是一样的,只需在blog
应用中创建tempaltes/blog/index.html
,之后配置文件也更改指定目录就好了。只是这样一来在管理维护的时候就显得比较麻烦。