首页 > 其他分享 >7、 Django-路由-router-页面跳转

7、 Django-路由-router-页面跳转

时间:2024-07-01 22:45:20浏览次数:17  
标签:index py App 跳转 Django urls path 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/

标签:index,py,App,跳转,Django,urls,path,router,路由
From: https://www.cnblogs.com/littlecc/p/18114182

相关文章

  • 10、 Django-模板-templates
     模板语法#模板中的变量语法:{{var}}如果变量不存在、则插入空字符串#方法不能有参数{{int}}{{str}}{{list}}{{list.0}}{{dict}}{{dict.a}}#dict['a']{{func}}#传递函数{{class_......
  • 12、 Django-模型models的基本操作-增删改查
    一般的数据库操作流程:1、创建数据库,设计表结构和字段2、连接Mysq1数据库,并编写数据访问层代码3.业务逻辑层去调用数据访问层执行数据库操作Diango通过Mode1操作数据库,不管你数据库的类型是MySql或者Sqlite,Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句......
  • 11、 Django-模型基础-models-ORM框架-管理器对象
     #概述django根据属性的类型确定以下信息当前选择的数据库支持字段的类型渲染管理表单时使用的默认htm1控件在管理站点最低限度的验证django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后则django不会再生成默认的主键列#属性命......
  • 探秘 Django 专业之道
    一、Django项目开发1.web框架底层1.1网络通信注意:局域网个人一般写程序,想要让别人访问:阿里云、腾讯云。去云平台租服务器(含公网IP)程序放在云服务器先以局域网为例我的电脑【服务端】importsocket#1.监听本机的IP和端口sock=socket.socket(socket.AF_INET......
  • Django数据库
    一、MySQL驱动程序安装我们使用Django来操作MySQL,实际上底层还是通过python来操作的。因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序。在Python3中,驱动程序有多种选择。比如pymysql以及mysqlclient等。这里我们就使用mysqlclient来操作。mysqlclient安装非常简单......
  • 基于Python+Django的商城购物系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • Django 笔记 - Django Shell
    启动DjangoShell交互式界面,具体命令如下:pythonmanage.pyshell具体实例实例1.直接修改用户密码,无需原密码。在DjangoShell交互式界面下,修改admin用户密码的具体代码如下:fromdjango.contrib.auth.modelsimportUseruser=User.objects.get(username='admin'......
  • 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使用@Controller注解跳转到thmyleaf页面时候报错
     报错如下######当我使用RestController时候接口可以得到返回的对象↓但是查看RestController和Controller的区别之后:也就是说@RestController返回的是一个对象,@Controller默认情况下,方法的返回值会被解析为一个视图名称,并寻找与该名称匹配的视图进行渲染。这意味着返回......