019:re_path函数详解

re_path使用:

1、re_path和path的作用是一样的,只不过re_path在写url的时候可以使用正则表达式——功能更加强大;

2、使用正则表达式时,推荐使用原生字符串(即:已 r 开头的字符串);

3、在正则表达式中定义变量,需要使用小括号括起来(例如匹配年份的表达式:(?P<year>\d{4})或 (?P<year>[0-9]{4}));下图是个实例:

 

4、如非特殊需求(要求),直接使用path就够用了,省得将代码搞得很麻烦(说不定,相对比较复杂的表达式——过几天自己都认不得自己为什么这样写);除非url中需要使用正则来匹配才使用:re_path ;

转载于:https://www.cnblogs.com/zheng-weimin/p/10160498.html

urlpatterns = [ path('xadmin/', admin.site.urls), path(r'index/',views.index), path('{}/'.format(schemaName),include('main.urls')),#导入schemaName re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)$', views.admin_lib2), re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.admin_lib3), re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.admin_lib4), re_path(r'admin/page/(?P<p1>.*)$', views.admin_page), re_path(r'admin/page/(?P<p1>.*)/(?P<p2>.*)$', views.admin_page2), re_path(r'admin/pages/(?P<p1>.*)$', views.admin_pages), re_path(r'admin/pages/(?P<p1>.*)/(?P<p2>.*)$', views.admin_pages2), re_path(r'front/(?P<p1>.*)$', views.schema_front1), re_path(r'front/(?P<p1>.*)/(?P<p2>.*)$', views.schema_front2), re_path(r'front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.schema_front3), re_path(r'front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.schema_front4), re_path(r'{}/front/(?P<p1>.*)$'.format(schemaName), views.schema_front1), re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)$'.format(schemaName), views.schema_front2), re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$'.format(schemaName), views.schema_front3), re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$'.format(schemaName), views.schema_front4), # re_path(r'assets/(?P<p1>.*)$', views.assets1), # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)$', views.assets2), # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.assets3), # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.assets4), #re_path(r'admin/(?P<p1>.*)$', views.admin_file1), re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)$', views.admin_file2), re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.admin_file3), re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.admin_file4), re_path(r'layui/(?P<p1>.*)$', views.layui1), re_path(r'layui/(?P<p1>.*)/(?P<p2>.*)$', views.layui2),
03-16
<think>好的,我现在需要帮助用户了解Django中的urlpatterns配置以及正则表达式的路径匹配规则。首先,我得回忆一下Django的URL调度机制,尤其是re_path和正则表达式的使用。用户可能已经看过一些文档,但需要更清晰的解释和示例。 根据提供的引用内容,用户提到了re_path的语法、正则表达式在路径匹配中的应用,以及分组命名和反向解析。我需要把这些点组织起来,确保覆盖到用户的需求。首先,应该解释两种不同的配置方式:pathre_path,分别对应普通字符串和正则表达式。然后,详细说明正则表达式的匹配规则,包括分组命名匹配,这能让视图函数获取到URL中的参数。此外,反向解析也是一个重要的点,需要提到如何在模板和视图中使用name参数来生成URL。 接下来,我需要考虑用户可能的疑问,比如如何在不同的应用中使用include来组织URL配置,这可能涉及到引用[4]中的例子。还有如何在正则表达式中使用命名分组,如引用[3]中的例子,以及如何在视图中获取这些参数。同时,要提到Django 2.0之后引入的path转换器,如<int:pk>,如引用[5]所述,这可能和正则表达式有重叠或替代关系,需要比较两者的使用场景。 需要注意用户提供的引用中有一些可能不太相关的内容,比如快速排序的例子,但用户的问题集中在Django的URL配置上,所以需要忽略不相关的引用。同时,要确保回答中的示例代码正确,符合Django的语法,比如使用正确的导入语句,如从django.urls导入re_path,而不是旧版的django.conf.urls.url,因为在较新的Django版本中,url已经被re_path取代。 此外,用户要求生成相关问题,这些问题应该围绕Django的URL配置展开,可能涉及正则表达式的高级用法、性能优化、常见错误处理等。需要确保问题有针对性,能够帮助用户深入理解主题。 最后,要检查回答是否符合格式要求,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少的数学公式,更多是代码示例。确保所有代码块使用正确的语法高亮,比如Python代码块使用python标识,并正确缩进。同时,引用标识需要自然地添加到对应的引用内容末尾,例如在提到re_path的语法时引用[^1],在提到正则表达式分组时引用[^3]等。 现在,我需要将以上思考整理成一个结构清晰的中文回答,包含基本配置、路径匹配规则、示例以及相关问题,确保覆盖用户的所有需求点,并正确引用提供的参考资料。</think>### Django URLpatterns配置及正则表达式路径匹配规则详解 #### 一、基本配置方式 Django提供两种URL匹配工具:`path()`(普通字符串匹配)和`re_path()`(正则表达式匹配)。两者的核心区别在于匹配规则的复杂度: ```python from django.urls import path, re_path urlpatterns = [ path('articles/<int:year>/', views.article_year), # 普通路径参数匹配[^2] re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive) # 正则表达式匹配[^3] ] ``` #### 二、正则表达式路径匹配规则 1. **基础语法结构** 正则表达式需以`^`开头和`$`结尾确保精确匹配: ```python re_path(r'^detail/(\d+)/$', views.detail) # 无名分组匹配数字ID[^3] ``` 2. **命名分组匹配** 使用`(?P<name>pattern)`语法捕获命名参数: ```python re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.month_archive) # 视图函数可获取year/month参数[^3] ``` 3. **类型约束匹配** 组合正则表达式与类型约束: ```python re_path(r'^product/(?P<id>[a-z]{2}\d{6})/$', views.product_detail) # 匹配类似"ab123456"的ID格式 ``` #### 三、特殊场景处理 1. **包含其他URL配置** 使用`include()`实现模块化配置: ```python urlpatterns = [ re_path(r'^blog/', include('blog.urls')) # 二级路由配置[^4] ] ``` 2. **反向解析支持** 通过`name`参数生成动态URL: ```python re_path(r'^user/(?P<username>\w+)/$', views.profile, name='user_profile') # 模板中可用{% url 'user_profile' username=user.name %}[^3] ``` 3. **正则表达式优先级** Django按URL配置顺序匹配,建议: - 将复杂正则表达式放在前面 - 简单路径放在后面 - 使用`^app/`前缀隔离不同应用的路由 #### 四、新旧版本对比 | 特性 | Django <2.0 | Django ≥2.0 | |---------------------|----------------------|----------------------| | 正则表达式支持 | `url()` | `re_path()` | | 路径参数类型 | 仅正则分组 | 内置5种path转换器 | | 示例 | `url(r'^page/(\d+)/$')` | `path('page/<int:id>/')` [^5] |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值