django 捕获特定名称下的所有 URLS
django catching all URLS under a specific name
我想在 urls.py 下有一个条目,它将捕获 URL 中以特定文件夹开头的所有子文件夹,在本例中为 example
:
示例:
/business
/business/one
/business/one/two
/business/one/two/three
/business/one/two/three/four
我希望所有这些 URLS 都进入 single view,稍后我可以确定有多少级别/business/
及其名称之后的文件夹。
您可以使用 <path:…>
path converter [Django-doc],但这要求元素非空。
使用re_path
如果您因此想要匹配包含空路径的路径,您可以使用 ([^/]+/)*
正则表达式模式:
from django.urls import re_path
urlpatterns = [
re_path(r'^business/<b>(?P<path>([^/]+/)*)</b>$', views.myview, name='myview'),
]
然后在视图中拆分路径:
def myview(request, path):
path_items = <b>path.split('/')</b>
path_items
是路径元素列表。
自定义路径转换器
您还可以注册自定义路径转换器:
# app/converters.py
class EmptyPathConverter:
<b>regex = '([^/]+/)*'</b>
def to_python(self, value):
return value.split('/')
def to_url(self, value):
return '/'.join(value)
然后注册路径转换器,定义路径时使用:
from app.converters import EmptyPathConverter
from django.urls import path, register_converter
register_converter(EmptyPathConverter, 'emptypath')
urlpatterns = [
path('business/<b><emptypath:paths></b>', views.myview, name='myview'),
]
然后我们可以在视图中使用它,它已经为我们做了拆分:
def myview(request, paths):
# paths is a list of strings
# …
我想在 urls.py 下有一个条目,它将捕获 URL 中以特定文件夹开头的所有子文件夹,在本例中为 example
:
示例:
/business
/business/one
/business/one/two
/business/one/two/three
/business/one/two/three/four
我希望所有这些 URLS 都进入 single view,稍后我可以确定有多少级别/business/
及其名称之后的文件夹。
您可以使用 <path:…>
path converter [Django-doc],但这要求元素非空。
使用re_path
如果您因此想要匹配包含空路径的路径,您可以使用 ([^/]+/)*
正则表达式模式:
from django.urls import re_path
urlpatterns = [
re_path(r'^business/<b>(?P<path>([^/]+/)*)</b>$', views.myview, name='myview'),
]
然后在视图中拆分路径:
def myview(request, path):
path_items = <b>path.split('/')</b>
path_items
是路径元素列表。
自定义路径转换器
您还可以注册自定义路径转换器:
# app/converters.py
class EmptyPathConverter:
<b>regex = '([^/]+/)*'</b>
def to_python(self, value):
return value.split('/')
def to_url(self, value):
return '/'.join(value)
然后注册路径转换器,定义路径时使用:
from app.converters import EmptyPathConverter
from django.urls import path, register_converter
register_converter(EmptyPathConverter, 'emptypath')
urlpatterns = [
path('business/<b><emptypath:paths></b>', views.myview, name='myview'),
]
然后我们可以在视图中使用它,它已经为我们做了拆分:
def myview(request, paths):
# paths is a list of strings
# …