首页 > 其他分享 >8、 Django-路由-router-路由传参

8、 Django-路由-router-路由传参

时间:2024-07-01 22:45:52浏览次数:19  
标签:传参 name user urls import router path 路由

路由传递参数:通过在路由的后跟 /<数据类型:参数>/   将参数传递给指定的视图函数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/

 

标签:传参,name,user,urls,import,router,path,路由
From: https://www.cnblogs.com/littlecc/p/18114416

相关文章

  • 7、 Django-路由-router-页面跳转
    概念:在实际开发过程中、一个Django项目会包含很多的app、这时候如果我们只在主路由里进行配置就会显得杂乱无章、所以通常在每个app中创建各自的urls.py路由模块、然后从根路由出发、将app所属的url请求、全部转发到相应的urls.py模块而这个从主路由转发到各个应用的路由的过......
  • 如何使用Express.js创建一个基本的路由?
    在现代Web开发或面试过程中,Express.js成为了必不可少的一部分。Express.js是Node.js的一个非常受欢迎和强大的框架,而创建路由是这个框架的核心功能之一。在这篇文章中,我们将详细介绍如何使用Express.js创建一个基本的路由,并附上示例代码帮助你理解。什么是路由?路由决定了......
  • ensp中静态路由配置
    静态路由配置静态路由是一种网络路由的配置方法,它是由网络管理员手动配置的,不依赖于动态路由协议。静态路由表中包含了网络的目标地址和下一跳地址的对应关系,它告诉路由器如何将数据包从一个网络发送到另一个网络。在静态路由中,网络管理员需要手动配置每个网络的目标地址......
  • vue前端项目补充API设计、安全性、状态管理、前端路由等功能
    为了完善前端项目,我们需要考虑API设计、安全性、状态管理和前端路由等方面。以下是如何集成这些功能的基本步骤。API设计定义API接口:根据后端服务提供的API,在前端项目中定义相应的接口函数。使用axios或其他HTTP客户端库来发送请求。封装API请求:创建一个服务模块......
  • 动态路由RIP协议
    一、拓扑二、 配置路由器端口IP地址R1R2  三.配置步骤1.Router(config)#routerrip       !启用RIP动态路由协议2.Router(config-router)#version{1|2}       !指定RIP协议的版本,不写默认版本1(一般都默认)3.Router(config-router......
  • Gateway 路由(详解)
    Gateway网关的路由功能可不是简简单单的“转发”请求,在请求到达网关再流转到指定服务之间发生了很多事儿,它不光可以拒绝请求,甚至可以“篡改”请求的参数,我们接下来就去看看路由这里面的门道。路由三重门Gateway中可以定义很多个Route,一个Route就是一套包含完整转发规则的路由......
  • react-router-dom 6.4版本的尝鲜和总结
    1.版本概述1.1版本发布背景ReactRouter6.4版本是继6.0大版本更新之后的又一重要里程碑。此版本发布于2024年,旨在进一步优化开发者体验,提供更加强大和灵活的路由功能。6.4版本在前一版本的基础上,引入了新的数据抽象,增强了导航钩子,使得UI与数据的同步更加容易。1.2主......
  • Vue的Router?一个小demo秒了
    效果展示正文登录页<template><div><divclass="login"><h3>图书管理系统</h3><divclass="user"><span>账号:</span><inputtype="text"v-model="user"/&g......
  • Java学习 - 网络静态路由与动态路由 讲解
    网络畅通的条件数据报包有去有回网络中的路由器必须知道且只需要知道下一跳的地址【路由器只要知道下一跳地址就行,不必知道如何到达任意的路由器,因为如果要实现,路由表将非常非常巨大,这是不可能的】静态路由静态路由是指网络管理员手动构建路由器的路由表,告诉路由器下一跳......
  • 【YOLOv8改进】BRA(bi-level routing attention ):双层路由注意力(论文笔记+引入代码)
    摘要作为视觉Transformers的核心构建模块,注意力机制是一种强大的工具,用于捕捉长程依赖关系。然而,这种强大功能也带来了代价:计算代价巨大且内存占用高,因为需要计算所有空间位置上成对的token交互。为缓解这一问题,一系列研究尝试通过引入手工设计且内容无关的稀疏性来改进注意力机......