Django开发博客-(2)模板的使用

时间:2021-07-19 03:25:53

Django模板

在上一章节中我们使用 django.http.HttpResponse() 来输出 “hello blog!”。该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想。
本章节我们将为大家详细介绍 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容。
接着上一章,在myblog中创建一个templates目录,随后创建一个myblog.html文件,总体结构目录如下
Django开发博客-(2)模板的使用
图2 templates增加后的目录

使用模板

在views中返回一个render()用于提交响应数据
修改views
并且为了后续方便,修改函数名为index

def index(request):
return render(request, 'myblog.html')

其中render()函数支持一个dict类型的参数,该字典是后台传递到模板的参数,键为参数名,在模板中使用{{ 参数名 }}来使用

def index(request):
return render(request, 'myblog.html',{'hello':'myblog!!!'})

同时在模板文件myblog.html中引用这个参数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
{{ hello }}</h1>
</body>
</html>

运行程序可能有个错误是
Django 找不到模版报错” django.template.exceptions.TemplateDoesNotExist: index.html”
解决办法就是在settings中修改以下代码:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
#os.path.join(BASE_DIR, 'templates')没了这句,
# 会显示django.template.exceptions.TemplateDoesNotExist: index.html
'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',
],
},
},
]

然后运行/blog/可以看到显示字符(注:本系列文章默认连接前都是加上127.0.0.1:8000的):
myblog!!!(这就是后台传递给前端的数据)

使用过程中的问题

假如你当前目录下有两个应用程序,此时并且模板的.html文件名相同此时就会有一些问题
同样按照以上步骤创建一个myblog_test应用,为了区别对待
myblog.views内容修改为:

def index(request):
return render(request, 'myblog.html',{'hello':'myblog_test!!!'})

别忘了添加到blog的urls中和settings中添加应用

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/$', include('myblog.urls')),
url(r'^blog_test/$', include('myblog_test.urls')),
]

此时120.0.0.1:8000/blog_test应该显示myblog_test!!!
但是最终没有显示myblog_test!!!,两者都显示了myblog!!!
这里有两种解决办法,其中之一就是上面settings中修改的路径’Dirs’
第二个就是在templates目录下创建一个目录myblog目录,将myblog.html文件移动到该目录下
此时目录结构如下图
Django开发博客-(2)模板的使用Django开发博客-(2)模板的使用
请忽略index.html。。。
随之要跟着修改views文件

def index(request):
return render(request, 'myblog/myblog.html',{'hello':'myblog!!!'})

同理myblog_test也要这样修改
然后运行程序可以看到
/blog/显示myblog!!!
/blog_test/显示myblog_test!!!