Django 中采用了 MVT (Model-Template-View) 设计模式,类似于 MVC,但有一些区别:
-
Model (模型):与数据库交互,处理数据的创建、读取、更新、删除。
-
Template (模板):负责页面渲染,生成最终的 HTML 内容。
-
View (视图):Django 的 View 更偏向于控制器的角色,接收请求并决定使用哪个模板和数据。
流程:
-
用户访问 URL,请求被 Django 的
urls.py映射到相应的 View。 -
View 处理业务逻辑,调用 Model 获取数据。
-
View 将数据传递给 Template。
-
Template 渲染 HTML,最终返回给用户
以下是Django中多个APP的URL设置及HTML模板映射实现:
1、项目根目录 urls.py
python
# 项目根目录 urls.py
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('app1/', include('app01.urls', namespace='app1')), # 包含app01的URL
path('app2/', include('app02.urls', namespace='app2')), # 包含app02的URL
]
2、app01/views.py
python
# app01/views.py
from django.shortcuts import render
def index(request):
return render(request, 'app01/index.html') # 渲染app01的index.html
def student(request):
return render(request, 'app01/student.html') # 渲染app01的student.html
3、app01/urls.py
python
# app01/urls.py
from django.urls import path
from . import views
app_name = 'app01' # 命名空间
urlpatterns = [
path('', views.index, name='index'), # 根路径对应index视图
path('student/', views.student, name='student'), # 子路径对应student视图
]
4、app02/views.py
python
# app02/views.py
from django.shortcuts import render
def home(request):
return render(request, 'app02/home.html') # 渲染app02的home.html
5、app02/urls.py
python
# app02/urls.py
from django.urls import path
from . import views
app_name = 'app02' # 命名空间
urlpatterns = [
path('', views.home, name='home'), # 根路径对应home视图
]
代码说明:
- 项目根目录的urls.py通过include()包含各APP的路由配置,实现路径分发。
- 每个APP独立维护urls.py和views.py,通过命名空间避免路由冲突。
- 视图函数使用render()渲染对应APP目录下的HTML模板(如app01/index.html)。
- 命名空间(app_name)支持反向解析URL(如{% url 'app1:index' %})。
- 通过路径分发(如path('app1/', include('app01.urls')))实现多APP路由隔离。