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 做了上述修改
      1. 先从manage.py的同级目录的templates下寻找
      2. 找不到根据app的注册顺序逐一去寻找他们templates目录中寻找
    • 没做修改
      1. 根据app的注册顺序逐一去寻找他们templates目录中寻找,找不到报错
posted @ 2022-07-19 16:03  pure3417  阅读(65)  评论(0编辑  收藏  举报