templates模板
前面只是返回了一个简单的字符串,但是一个正常的网站应该都是有多个html页面组成。
如果想要django放回一个html页面,该怎么办呢?
django给我们提供了一个render
的方法
url.py
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
# 假如用户访问www.xxx.com/index 就会执行侯敏的views.index这个函数
path('index/', views.index),
# 当我们有多个路由时,只需要定义好url,并且定义好对应的函数即可
path('user/list', views.user_list),
]
app01\views.py
from django.shortcuts import render, HttpResponse
def index(request):
return HttpResponse('hello world')
def user_list(request):
# render 返回一个html页面
# render 第一个参数为定义函数是传入的request 第二个参数为你要返回的页面
# 会从app目录下的templates目录下寻找user_list.html
# 根据app的注册顺序逐一去寻找他们templates目录中寻找,找不到报错
return render(request, "user_list.html")
app01\templates\user_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>user_list</title>
</head>
<body>
<h1>用户列表</h1>
</body>
</html>
访问http://127.0.0.1:8000/user/list
前面说到了 django会默认会从app目录下的templates目录下寻找html页面
这与settings的配置有关
在创建项目一节中提到了两种创建django项目的方式的不同
我们这里将TEMPLATES.DIRS
的值修改
settings.py
import os
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',
],
},
},
]
templates(manage.py的同级目录)\user_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>user_list</title>
</head>
<body>
<h1>用户列表,根目录</h1>
</body>
</html>
再次访问http://127.0.0.1:8000/user/list
-
模板查找顺序
- 假如说settings.py 做了上述修改
- 先从manage.py的同级目录的templates下寻找
- 找不到根据app的注册顺序逐一去寻找他们templates目录中寻找
- 没做修改
- 根据app的注册顺序逐一去寻找他们templates目录中寻找,找不到报错
- 假如说settings.py 做了上述修改