当前位置: 首页 > news >正文

django urlconf路由分发

在Django中,URLconf(URL configuration)是用来定义应用程序的URL路由规则的,主要用于将特定的URL请求映射到相应的视图函数。以下是关于Django中URL分发的详细介绍和代码示例。

URLconf的基本结构

  1. URL配置文件(urls.py)
    在项目的urls.py文件中定义URL模式,并将其指向视图函数。

    # project/urls.py
    from django.contrib import admin
    from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('blog/', include('blog.urls')),  # 引入 blog 应用的 URL 配置
    ]
    
  2. 应用的URL配置(app的urls.py)
    在应用程序中定义应用特定的URL模式。

    # blog/urls.py
    from django.urls import path
    from . import viewsurlpatterns = [path('', views.index, name='index'),  # 空路径,指向首页path('<int:post_id>/', views.detail, name='detail'),  # 动态路径,带参数
    ]
    

URL分发和路由匹配

  1. include()函数
    include() 用于引用其他应用的URL配置,这使得项目中的URL结构模块化。它可以帮助将不同应用的URL配置分离,使主项目的urls.py更加简洁。

    # 在主urls.py中 include其他应用的urls
    path('blog/', include('blog.urls'))
    
  2. 动态URL
    在URL模式中可以定义带参数的路径。例如,<int:post_id>/ 表示该路径带有一个整数类型的参数post_id,Django会将请求中的这个参数传递给对应的视图函数。

    # blog/urls.py
    path('<int:post_id>/', views.detail, name='detail')
    
  3. 命名URL模式
    使用name参数可以为URL模式命名,这样在视图或者模板中就可以通过名字引用特定的URL。这样做不仅使代码更具可读性,还便于后期维护。

    # blog/urls.py
    path('<int:post_id>/', views.detail, name='detail')# 在模板中使用 URL 的名字
    <a href="{% url 'detail' post_id=1 %}">查看文章</a>
    
  4. 正则表达式路由(Django 2.0之前)
    在Django 2.0之前,可以使用正则表达式定义URL模式,现在Django推荐使用路径转换器(如<int:>)。如果需要使用正则表达式,可以通过re_path()来定义。

    from django.urls import re_pathurlpatterns = [re_path(r'^post/(?P<slug>[-\w]+)/$', views.detail, name='detail'),
    ]
    

URL配置的常见用法

  • 静态文件和媒体文件的路由配置
    在开发环境中,需要为静态文件和用户上传的媒体文件设置URL路由:

    from django.conf import settings
    from django.conf.urls.static import staticurlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
  • 为API设计的路由
    在API项目中,可以通过第三方库(如Django REST framework)的路由系统,简化视图函数的URL分发。

    from rest_framework import routers
    from . import viewsrouter = routers.DefaultRouter()
    router.register(r'users', views.UserViewSet)urlpatterns = [path('', include(router.urls)),
    ]
    

总结

Django的URLconf机制使得路由分发变得非常灵活,通过include()、动态URL、命名URL、以及使用正则表达式的方式,可以轻松地为项目中的不同应用、页面或者API定义路由。

http://www.lryc.cn/news/457926.html

相关文章:

  • The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)
  • TensorFlow与Pytorch的转换——1简单线性回归
  • 短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码
  • AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖
  • 六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询
  • 按分类调用标签 调用指定分类下的TAG
  • 报错 - llama-index pydantic error | arbitrary_types_allowed | PydanticUserError
  • PostgreSQL Docker Error – 5432: 地址已被占用
  • 【LeetCode】动态规划—646. 最长数对链(附完整Python/C++代码)
  • 数字媒体产业园区:创新资源集聚,助力企业成长
  • 【Linux】来查看当前系统的架构
  • QT中的信号槽
  • 域名怎么转让给别人?
  • 计算机网络思维导图
  • 07.useDefault
  • git更加详细和灵活的提交过程,附带如何配置. gitignore来忽略部分文件的提交。
  • 使用正则表达式删除文本的奇数行或者偶数行
  • YOLOv10改进策略【注意力机制篇】| CVPR2024 CAA上下文锚点注意力机制
  • Unity修改鼠标图片【超简单】
  • windows C++-创建数据流代理(三)
  • C语言学习-循环嵌套打印字母金字塔
  • 探索CI/CD:持续集成与持续部署的基本概念
  • 大厂面试真题:说一说CMS和G1
  • 使用Qt Creator创建项目
  • C++ 与 C 的那些事儿:深度剖析两者区别
  • 学习​Redis 高可用性​
  • 【含开题报告+文档+PPT+源码】基于springBoot+vue超市仓库管理系统的设计与实现
  • 美发店管理革新:SpringBoot系统的应用
  • C++从0到1
  • VMware Tools 安装和配置