8、 Django-路由-router-路由传参
路由传递参数:通过在路由的后跟 /<数据类型:参数>/ 将参数传递给指定的视图函数views.py
-- 这个参数可以是变量、而这个变量可以从html中获取
如:
models.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
views.py
from django.shortcuts import render from App_route.models import * # Create your views here. #首页函数 def index(request): return render(request, 'index.html') #用户列表函数 def user_list(request): #获取全部用户的信息 #从models中拿 users = UserModel.objects.all() #这里是将users 定义为 users标签 并传递给 user_list.html return render(request, 'user_list.html', {'users': users}) #用户信息函数 #uid需要路由传进来 def user_detail(request, uid): # print('uid', uid) #这里get获取 用户的主键 也就是id #如 获取主键为 1 的用户的信息 user = UserModel.objects.get(pk=uid) #pk:primary key 表示主键 return render(request, 'user_detail.html', {'user': user})
index.html
<!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 '根路由中的 命名空间名:子路由中path路径的别名' %} #} {# 这句的意思是:去根路由urls下找到App_route这个命名空间的路由、找到对应应用下的子路由、在子路由中的找到path路由中 name=userlist 命名的路由 在执行视图中相应的函数#} <a href="{% url 'App_route:userlist' %}">反向解析带命名空间的方式:进入用户列表</a> {# 方法二和方法三只能选择一种 #} </body> </html>
user_list.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户列表</title> </head> <body> <h2>用户列表</h2> <hr> {# 循环遍历每个用户 #} <ul> {% for user in users %} <li> {# 反向解析: 带命名空间 #} {# 这里遍历出来的会包含 id 、这个id会传递给子路由只中 #} <a href="{% url 'App_route:userdetail' user.id %}"> {{ user.id }}:{{ user.name }} - {{ user.age }} </a> </li> {% endfor %} </ul> </body> </html>
detail.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户详情</title> </head> <body> <h2>用户详情</h2> <hr> <p>用户名字:{{ user.name }}</p> <p>用户年龄:{{ user.age }}</p> </body> </html>
根路由:urls.py
""" URL configuration for djangoRoute project. The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ 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), ]
子路由: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'), #用户详情 #使用路由传递参数 <数据类型:传入视图函数中的参数> #这里的参数uid从user_list.html中的for循环中的 user 遍历的 user.id中获取 path('userdetail/<int:uid>/', user_detail, name='userdetail'), #传递多个参数 #path('userab/<int:a>/<int:b>/', user_ab_view, name='userab') ]
访问:
http://127.0.0.1:8000/user/userlist/
扩展:
如果传递多个参数给视图函数
1、views.py ------------------------------------------------------------ def user_ab_view(request, a, b): return HttpResponse(f'a:{a} - b{b}') --------------------------------------------------------- 2、子路由:urls.py -------------------------------------------------------- from django.urls import path from App_route.views import * urlpatterns = [ #传递多个参数 path('userab/<int:a>/<int:b>/', user_ab_view, name='userab') ] ------------------------------------------------------------------------
访问:
http://127.0.0.1:8000/user/userab/2/4/
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18114416
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步