DjangoURL调度器(二)

一、默认值与额外参数

image-20220927215649998

1.1、默认值

1.1.1、urls.py
from django.urls import path


from . import views


urlpatterns = [
  # http://127.0.0.1:8000/polls/blog/ 等同于         
  # http://127.0.0.1:8000/polls/blog/1/
  path('blog/', views.page),
  # http://127.0.0.1:8000/polls/blog/1/
  # http://127.0.0.1:8000/polls/blog/10/
  # http://127.0.0.1:8000/polls/blog/99/
  path('blog/<int:num>/', views.page),
]
1.1.2、views.py
def page(request, num=1):
  # 编写对应的业务逻辑

1.2、额外的参数

1.2.1、urls.py
from django.urls import path
from . import views


urlpatterns = [
  # 会传递给 views.
  path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
]
1.2.2、views.py
def year_archive(request, year=2005, foo='bar')
  # 编写对应的业务逻辑

二、错误处理

image-20220927222118733

  • handler400- 状态码400
  • handler403- 状态码403
  • handler404- 状态码404
  • handler500- 状态码500
  1. 在 settings中修改配置:

    DEBUG = False
    
    
    ALLOWED_HOSTS = ['*']
    
  2. 在主应用的urls中配置:

    # polls是子应用
    handler404 = "polls.views.page_not_found"
    
  3. 在polls应用的views中添加函数page_not_found:

    def page_not_found(request, exception):
      return HttpResponse('自定义的404错误页面')
    
  4. 浏览器测试访问,找不到匹配的路由

    image-20210705154513931

三、引用其他URL调度器

image-20220927222647740

3.1、include(str)

from django.urls import include, path


urlpatterns = [
  path('community/', include('aggregator.urls')),
  path('contact/', include('contact.urls')),
]

3.2、include(list/tuple)

from django.urls import include, path


from apps.main import views as main_views
from credit import views as credit_views


extra_patterns = [
  path('reports/', credit_views.report),
  path('reports/<int:id>/', credit_views.report),
  path('charge/', credit_views.charge),
]


urlpatterns = [
  path('', main_views.homepage),
  path('help/', include('apps.help.urls')),
  path('credit/', include(extra_patterns)),
]

3.3、技巧

优化繁琐的URL地址编写

from django.urls import path
from . import views


urlpatterns = [
  path('<page_slug>-<page_id>/history/', views.history),
  path('<page_slug>-<page_id>/edit/', views.edit),
  path('<page_slug>-<page_id>/discuss/', views.discuss),
  path('<page_slug>-<page_id>/permissions/', views.permissions),
]

优化

from django.urls import include, path
from . import views


urlpatterns = [
  path('<page_slug>-<page_id>/', include([
    path('history/', views.history),
    path('edit/', views.edit),
    path('discuss/', views.discuss),
    path('permissions/', views.permissions),
   ])),
]

四、URL反向解析

image-20220927223947184

url调度器除了从用户发起请求,到匹配对应的view,还能在python程序中调用进行匹配,通过 path或re_path 中 的name属性进行解析

  • 在模板中,使用url模板标签

  • 在Python代码中(主要是views),使用 reverse() 函数

4.1、示例

urls中配置

from django.urls import path


from . import views


urlpatterns = [
  #...
  path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
  #...
]

4.2、在模板中测试

  • views.py跳转到页面
def do_html(request):
  return render(request,'redirect_test.html')


def year_archive(request,year):
  return HttpResponse(f'重定向成功{year}')
  • 模板中代码
    # 模板中:
    <a href="{% url 'news-year-archive' 2030 %}">2030 Archive</a>
    

    4.3、在python代码测试

    from django.urls import reverse
    from django.http import HttpResponseRedirect
    
    
    def redirect_to_year(request):
      return HttpResponseRedirect(reverse('news-year-archive', args=(2030,)))
    

    五、命名空间

    image-20220928184222965

    命名空间主要用于配合url反向解析使用,多个不同的urls文件中可能配置同名的 name,那么为了进行区分,给不同的urls进行不同的命名

    注意

    同一个项目下命名空间不能重复,切记!

    5.1、命名空间基本使用

    通过在 url调度器的模块中,定义 app_name = 'polls' 来命名

    from django.urls import path
    from . import views
    
    
    # 定义,一般命名空间和子应用名相同,便于记忆
    app_name = 'polls'
    urlpatterns = [
      path('', views.index_view, name='index'),
      path('<int:pk>/', views.detail_view, name='detail'),
      ...
    ]
    # 调用,一旦有了命名空间,调用时就必须使用 polls: 前缀
    reverse('polls:index')
    

    5.2、命名空间嵌套

    # 在 urls 中配置如下:
    from django.urls import path
    from . import views
    
    
    # 定义命名空间,一般命名空间名和子应用名相同,便于记忆
    app_name = 'polls'
    extra_patterns = (
       [
        path('app_name/', views.app_name, name='app_name'),
       ],
      # 此处就是嵌套的命名空间
      'extra'
    )
    urlpatterns = [
      path('', views.index_view, name='index'),
      path('<int:pk>/', views.detail_view, name='detail'),
      path('extra/', include(extra_patterns)),
      ...
    ]
    # 在模板中使用:
    <a href="{% url 'polls:extra:app_name' %}">点击链接</a>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/355113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解读BEVFormer,新一代自动驾驶视觉工作的基石

文章出处 BEVFormer这篇文章很有划时代的意义&#xff0c;改变了许多视觉领域工作的pipeline[2203.17270] BEVFormer: Learning Birds-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers (arxiv.org)https://arxiv.org/abs/2203.17270 BEV …

架构篇19:单服务器高性能模式-Reactor与Proactor

文章目录 ReactorProactor小结上篇介绍了单服务器高性能的 PPC 和 TPC 模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC 和 TPC 完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Rea…

第18章_JDK8-17新特性(下)(新语法结构,API的变化,其它结构变化,小结与展望)

文章目录 第18章_JDK8-17新特性&#xff08;下&#xff09;6. 新语法结构6.1 Java的REPL工具&#xff1a; jShell命令6.2 异常处理之try-catch资源关闭6.3 局部变量类型推断6.4 instanceof的模式匹配6.5 switch表达式6.6 文本块6.7 Record6.8 密封类 7. API的变化7.1 Optional类…

MarkDown快速入门-以Obsidian编辑器为例

直接上图&#xff0c;左右对应。 首先是基础语法。 # 标题&#xff0c;几个就代表几级标题&#xff1b;* 单个是序号&#xff0c;两个在一起就是斜体&#xff1b;- [ ] 代表任务&#xff0c;注意其中的空格&#xff1b; 然后是表格按钮代码 | 使用中竖线代表表格&#xff0c…

SparkSql---用户自定义函数UDFUDAF

文章目录 1.UDF2.UDAF2.1 UDF函数实现原理2.2需求:计算用户平均年龄2.2.1 使用RDD实现2.2.2 使用UDAF弱类型实现2.2.3 使用UDAF强类型实现 1.UDF 用户可以通过 spark.udf 功能添加自定义函数&#xff0c;实现自定义功能。 如&#xff1a;实现需求在用户name前加上"Name:…

【QT+QGIS跨平台编译】之十四:【webp+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、webp介绍二、webp下载三、文件分析四、pro文件五、编译实践一、webp介绍 WebP 是一种现代的图像格式,由 Google 开发。它能够提供更好的压缩率和图像质量,相比于传统的 JPEG 和 PNG 格式。WebP 图像通常具有更小的文件大小,同时保持高质量的图像细节,这使得它…

总结6(循环(for))

循环 定义&#xff1a; 某些代码会被重复执行 分类&#xff1a; for 1.格式 for(1; 2; 3) 语句A; 2.执行的流程&#xff08;1,2,A,3 2,A,3 2,A,3..........&#xff09; 单个for循环的使用 多个for循环的嵌套使用 1). for&#xff08;1; 2; 3&#xff09; for&#xff0…

【数据分析】numpy基础第二天

文章目录 前言数组的形状变换reshape的基本介绍使用reshapereshape([10, 1])运行结果reshape自动判断形状reshape([-1, 1])运行结果 合并数组使用vstack和hstackvstack和hstack的运行结果使用concatenateconcatenate运行结果 分割数组array_split运行结果 数组的条件筛选条件筛…

qemu单步调试arm64 linux kernel

一、背景和目的 qemu搭建arm64 linux kernel环境-CSDN博客 之前介绍了qemu启动kernel的配置步骤和方法&#xff0c;现在开始我们的调试&#xff0c;这篇文章主要讲解如何单步调试内核&#xff0c;所有的实验还是基于ARM64&#xff1b; 二、环境准备 需要准备hostx86 target…

VirtualBox:安装提示缺少python core和win32 api

最近升级了Ubuntu22.04&#xff0c;查了一下&#xff0c;VirtualBox的增强功能&#xff0c;居然用时5分钟。 5min 18ms vboxadd.service 据说升级VirtualBox的增强功能能解决这个问题&#xff0c;于是先升级VirtualBox&#xff0c;但是安装VirtualBox却报缺少python core及win3…

Android App开发-简单控件(4)——按钮触控和图像显示

3.4 按钮触控 本节介绍了按钮控件的常见用法&#xff0c;包括&#xff1a;如何设置大小写属性与点击属性&#xff0c;如何响应按钮的点击事件和长按事件&#xff0c;如何禁用按钮又该如何启用按钮&#xff0c;等等。 3.4.1 按钮控件Button 除了文本视图之外&#xff0c;按钮…

【GAMES101】Lecture 11 贝塞尔曲线

曲线这部分基本上就单讲了贝塞尔曲线 目录 贝塞尔曲线&#xff08;Bezier curves&#xff09; De Casteljau’s algorithm B-splines 贝塞尔曲线&#xff08;Bezier curves&#xff09; 很早之前说过的这种矢量图是不会随着放大而失真的&#xff0c;像这种字体&#xff0c…

Mysql第一天

数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。(可掉电:内存 使用高电压和低电压来区别0和1进行数据的一个存储但是一旦断电了电压都没了 0和1也就没有了)大多数情况下&#xff0c;特别是企 业级应用&#…

CSS 星空按钮

<template><button class="btn" type="button"><strong>星空按钮</strong><div id="container-stars"><div id="stars"></div></div><div id="glow"><div class=…

HCIA-HarmonyOS设备开发认证-3.内核基础

目录 前言目标一、进程与线程待续。。。 前言 对于任何一个操作系统而言&#xff0c;内核的运行机制与原理是最为关键的部分。本章内容从多角度了解HarmonyOS的内核运行机制&#xff0c;涵盖进程与线程的概念&#xff0c;内存管理机制&#xff0c;网络特性&#xff0c;文件系统…

vue3 + ts vue_3.4 setup单文件组件中的属性

props 各种类型 <script lang"ts" setup>import { ref, PropType } from vue;interface listType {addres: string;code: number;}interface ftObj {obj1: string[];obj2: {[key: string]: any;};}const props defineProps({name: {type: String as PropType&…

C 练习实例50-使用Dev-C++创建项目(圆形体体积计算器)

项目展示 项目案例&#xff1a;圆形体体积计算器 vol.h文件 #include <stdio.h> #include <math.h> #define PI 3.141592654 void cal(int sel); //函数声明 double vol_ball(void); double vol_cylind(void); double vol_cone(void); main.c文件 #include &quo…

代理IP使用指南:风险与注意事项

在当今的数字化时代&#xff0c;使用在线代理IP已经成为一种常见的网络行为。然而&#xff0c;在使用这些代理IP时&#xff0c;我们需要注意一些风险和问题&#xff0c;以确保我们的网络安全和隐本私文。将探讨使用代理IP时需要注意的几个关键问题。 1、代理IP的安全性 使用代理…

【JavaLearn】#(29)Maven引入、Maven项目类型、Maven安装与配置、Maven项目的创建和使用、pom配置文件介绍

1. Maven引入 1.1 传统方式中项目jar包资源的问题 项目中的jar包资源&#xff08;如JDBC驱动包&#xff09;需要我们自己从网上下载&#xff0c;然后手动导入到项目中使用 –> 一旦jar包资源过多&#xff0c;容易造成遗漏&#xff0c;且不好管理 如果有两个项目&#xff0…

LabVIEW动态数据交换实现数据通信

LabVIEW动态数据交换实现数据通信 介绍了LabVIEW软件在驱动一般多功能接口卡中的应用。LabVIEW作为一种图形化编程平台&#xff0c;被广泛应用于自动测量系统、工业过程自动化等领域。利用LabVIEW驱动实验室中常用的多功能接口卡&#xff0c;以实现数据采集和分析。 系统主要…