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 @   pure3417  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示