7、 Django-路由-router-页面跳转
概念:
在实际开发过程中、一个Django项目会包含很多的app、这时候如果我们只在主路由里进行配置就会显得杂乱无章、 所以通常在每个app中创建各自的urls.py路由模块、然后从根路由出发、将app所属的url请求、全部转发到相应的urls.py 模块 而这个从主路由转发到各个应用的路由的过程叫路由的分发
路由的匹配
#使用url给视图函数传参 path('index/', index) path('detail/<int:id>/', detail) #给url取别名、那么在使用此url的地方可以使用此别名、如: path('index/',index,name='index') path('detail/<int:id>/',detail, name='detail')
命名空间
在实际应用中、Django中可能存在多个应用程序、每个应用程序都有可能有自己的路由模块 为了防止路由冲突、Django提供了命名空间namespace的概念 命名空间是一种将路由命名为层次结构的方式、使得在查询路由的时候可以限定在该命名空间内 #如在根路由中可以设置命名空间 path('app/', include(('App.urls', "APP"), namespace='App'))
反向解析
Django路由的反向解析可以让我们在代码中是使用路由的别名替代URL路径、在修改url时避免代码中的硬编码的依赖、同时提高可读性和可维护性 #在视图函数中、反向解析URL from django.shortcuts import render, redirect, reverse def buy(request): return redirect(reverse('index')) return redirect(reverse('detail', args=[2])) return redirect(reverse('detail', kwargs={"id": 2})) #templates中、使用别名 {% url 'detail' stu.id %} #使用命名空间、指定命令空间后、使用反向解析时需要加上命名空间、如: #1、在视图函数中: return redirect(reverse('App: index')) #2、在templates中: {% url 'App:index' %}
案例:
1、模型定义:modeles.py -------------------------------------------------------------------------------------------- from django.db import models #创建字段 class UserModel(models.Model): name = models.CharField(max_length=30) age = models.PositiveIntegerField() #非负数 #表字段定义好后 执行 数据迁移 # python .\manage.py makemigrations # python .\manage.py migrate ----------------------------------------------------------------------------------------- 2、视图views.py -------------------------------------------------------------------------------------- from django.shortcuts import render #首页函数 def index(request): return render(request, 'index.html') #用户列表函数 def user_list(request): return render(request, 'user_list.html') --------------------------------------------------------------------------------------- 3、首页函数:index.html <hr> 表示换行 ---------------------------------------------------------------------------------------- <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h2>首页</h2> <hr> {# 方式一:url路由跳转到其它页面 通过a标签超链接方式 #} {# /user/userlist/ 相当于需要跳转页面的地址 #} <a href="/user/userlist/">url路由方式:进入用户列表页面</a> <hr> {# 方式二:反向解析 跳转到其它页面 重定向 #} {# 'userlist' 是patn路由中的 name 的值:name='userlist' #} {# <a href="{% url 'userlist' %}">反向解析方式:进入用户列表页面</a> #} <hr> {# 方法三:反向解析:带命名空间 #} {# {% url '根路由中的 命名空间名:子路由urls中的path别名' %} #} {# 这句的意思是:去根路由urls下找到App_route这个命名空间的路由、找到对应应用下的子路由、在子路由中的找到path路由中 name=userlist 命名的路由 在执行视图中相应的函数#} <a href="{% url 'App_route:userlist' %}">反向解析带命名空间的方式:进入用户列表</a> {# 方法二和方法三只能选择一种 #} </body> </html> ------------------------------------------------------------------------------------------------------------- 4、用户列表页面:user_list.html ------------------------------------------------------------------------------------------------------- <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户列表</title> </head> <body> <h2>用户列表</h2> <hr> </body> </html> --------------------------------------------------------------------------------------------- 5、子路由:urls.py ----------------------------------------------------------------------------------------- from django.urls import path from App_route.views import * urlpatterns = [ #首页 UserInfoView 视图函数中的首页函数 path('index/', index, name='index'), #用户列表路由 path('userlist/', user_list, name='userlist') ] ------------------------------------------------------------------------------------------------------- 6、根路由:urls.py #推荐使用命名空间的路由方式 --------------------------------------------------------------------------------------- from django.contrib import admin from django.urls import path from App_route.views import * #导入视图函数 from django.urls import include #导入子路由模块 include函数 urlpatterns = [ #直接使用根路由 #path('user/', UserInfoView), #使用子路由 include 包含子路由 urls.py的路径 #path('user/', include('App_route.urls')), #使用子路由:include函数 、再使用命名空间namespace #在使用命名空间namespace的时候:命名空间名一般和应用名相同 #path('user/', include(('子路由urls.py的路径','App名'), namespace='App名')), path('user/', include(('App_route.urls','App_route'), namespace='App_route')), path('admin/', admin.site.urls), ] --------------------------------------------------------------------------------------------------------------
页面的访问:
http://127.0.0.1:8000/user/index/
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18114182
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步