如何在Django中用re_path配置匹配指定字符的自定义URL路径
使用Django的re_path配置符合要求的URL路径
你可以通过自定义正则表达式实现这个需求,具体配置步骤如下:
1. 在urls.py中定义URL模式
在项目或应用的urls.py文件里,导入re_path并添加对应的URL规则:
from django.urls import re_path from . import views urlpatterns = [ re_path(r'^mysite/(?P<resource>[a-zA-Z0-9-.]+)/$', views.resource_detail, name='resource-detail'), ]
2. 正则表达式规则说明
^mysite/:匹配URL起始部分的/mysite/,确保路径从这里开始(?P<resource>[a-zA-Z0-9-.]+):(?P<resource>...)是命名捕获组,resource是后续在视图中可接收的参数名(可替换为slug等你习惯的名称)[a-zA-Z0-9-.]+是核心匹配规则:[]内的字符表示允许的范围,包含大小写ASCII字母、数字、连字符-和点.;+表示匹配一个或多个这类字符
/$:匹配URL结尾的斜杠,避免匹配到/mysite/toto-25b.ko/extra这类带多余后缀的路径
3. 视图函数接收参数
对应的视图函数可以直接接收捕获到的参数:
def resource_detail(request, resource): # 这里编写业务逻辑,比如根据resource参数查询对应资源 return HttpResponse(f"访问的资源标识:{resource}")
补充说明
- 若不需要命名捕获组,也可以简化为
([a-zA-Z0-9-.]+),但命名组可读性更强,便于后续维护 - 若你的Django设置中
APPEND_SLASH=True(默认开启),可将正则里的/$改为/?$,允许URL结尾有无斜杠
内容的提问来源于stack exchange,提问作者Khalifa
相关产品推荐
相关产品推荐

