我想匹配可以有多個檔案夾的動態創建的 URL 。為此需要一些正則運算式模式。例如。
http://127.0.0.1:8000/api/:user_id/:foldersa/:folders1/
http://127.0.0.1:8000/api/:user_id/:foldersb/:folders2/:folders3/:folders4
http://127.0.0.1:8000/api/:user_id/:foldersc/:folders2/
http://127.0.0.1:8000/api/:user_id/:foldersd/:folders1/:folders2/
所以直到BASE_URL/api/:user_id/很常見。我可以捕獲 user_id 但想在單個字串變數上捕獲 user_id 之后的其他引數。
之后,可以有任意數量的檔案夾,我想將它們全部捕獲在一個字串變數中。
就像捕獲的第一個 URL 字串變數一樣"foldera/folder1/",下一個 url 字串變數將"folderb/folder2/folder3/folder4"與 fwd 斜杠一起。
我應該在 urls.py 中撰寫什么正則運算式模式來捕獲此檔案夾?
我試過了
re_path(r'(?P<user_id>[-\w] )/(?P<customUrl>(.*?)(?:\/)?$)/.*', customLink, name='customLink'),
但無法讓它作業。
uj5u.com熱心網友回復:
您可以匹配除最后一個可選斜杠之外的所有內容:
re_path(r'(?P<user_id>[-\w] )/(?P<custom_url>.*?)/?$', customLink, name='customLink'),
在視圖中,您可以使用以下方式拆分端點:
def customLink(request, user_id, custom_url):
endpoints = custom_url.split('/')
# …
您還可以使用路徑轉換器:
# app_name/converters.py
class EndpointsConverter:
regex = ".*?"
def to_python(self, value):
return value.split('/')
def to_url(self, value):
if isinstance(value, str):
return value
return '/'.join(value)
然后您可以使用路徑轉換器:
from django.urls import path, register_converter
from app_name.converters import EndpointsConverter
register_converter(EndpointsConverter, 'endpoints')
urlpatterns = [
path('<str:user_id>/<endpoints:endpoints>/', customLink, name='customLink'),
# …
]
這將通過斜線自動拆分(并連接)端點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434114.html
標籤:django 正则表达式 网址 django 网址 正则表达式组
