您可以匹配除最后一个可选尾部斜线之外的所有斜线:
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'),
# …
]
这将自动用斜杠分割(并连接)端点。