Django2.0 的路由配置中,如何用Python匹配任意字符
在 django2.0 中不再使用正则表达式进行路由匹配,而是启用了新的路由配置,更加简洁
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含 0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的 uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符
我的问题是如何匹配任意字符,需要使用自定义吗?
我需要实现的是当用户访问/history或者/history/任意字符事都跳转到 history 页面,在不使用正则的情况下可以实现吗,试了上面的自带的路由转化器,似乎没有达到想要的效果。也有可能我没太读懂这个转换器的意思,请支出。
或者在同一条路由配置中,可以使用多个匹配方式吗?
我是一个初学者,希望能够得到大家的帮助,谢谢!
def view_history(request,history):
return HttpResponse('这是观看历史页')
path(‘此处如何匹配’,views.view_history),
Django2.0 的路由配置中,如何用Python匹配任意字符
re_path 正则路由,了解一下?
在Django 2.0+的路由配置中,要匹配任意字符,主要用path()转换器或re_path()正则。最直接的是用path()的<path:>转换器,它能匹配包含斜杠/在内的任意字符。如果不需要匹配斜杠,就用<str:>或<slug:>。需要更复杂匹配时就用re_path()写正则。
1. 用 path() 的 <path:> 转换器
这个能匹配包括/的任意非空字符串,适合匹配路径。
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('files/<path:file_path>/', views.file_view, name='file_view'),
]
视图函数里就能拿到file_path参数:
# views.py
def file_view(request, file_path):
# file_path 可以是 "docs/readme.txt" 这样的带斜杠的路径
return HttpResponse(f"File path: {file_path}")
2. 用 path() 的其他转换器
如果不需要匹配斜杠:
<str:>:匹配任意非空字符串,但不包括/。<slug:>:匹配字母、数字、连字符、下划线组成的字符串。
3. 用 re_path() 写正则表达式
需要复杂匹配时就用这个,比如要匹配特定模式。
# urls.py
from django.urls import re_path
from . import views
urlpatterns = [
# 正则 .* 匹配任意字符(包括空字符串)
re_path(r'^match/(?P<content>.*)/$', views.match_view, name='match_view'),
]
视图函数:
# views.py
def match_view(request, content):
# content 可以是任意字符串,包括空字符串
return HttpResponse(f"Matched: {content}")
总结:
- 要匹配带斜杠的路径就用
<path:>。 - 不要斜杠就用
<str:>或<slug:>。 - 复杂匹配上正则
re_path()。
一句话建议:根据要不要斜杠选path转换器,复杂的用re_path。
有了新的路由方式,就感觉不想用正则了,毕竟本来也就不熟悉正则,看的头大
试试 path(<path:name>, views.view_history),
前面书写错误,手机修改内容太麻烦了。
path(‘history/<path:name>/’, views.view_history),
你好,我遇到同样的问题,你解决了吗?我是想匹配 53_P_1495068879687.jpg ,上面没有一个符合需求的

