URL Django 中的两种模式解析
URL resolution in Django with two patterns
需要为 Django 中的任务和子任务提供选项。其中示例任务是 abc_123
,示例子任务是 xyz-987
example.com/abc_123/options
example.com/abc_123/xyz-987/options
我的urls.py文件
urlpatterns = [
url(r'^/(?P<taskId>.+)/options$', views.AvailableOptions.as_view()),
url(r'^/(?P<taskId>.+)/(?P<subtaskId>.+)/options$', views.AvailableOptions.as_view()),
]
只发送taskId时正常。发送任务和子任务 ID 时。该模式将 abc_123/xyz-987
作为 taskId。我需要 url 分别解析为 abc_123
和 xyz-987
作为 taskId 和 subtaskId
你不应该匹配斜线,所以我们可以使用匹配除斜线以外的所有字符组,所以:
urlpatterns = [
url(r'^/(?P<taskId><b>[^/]+</b>)/options$', views.AvailableOptions.as_view()),
url(r'^/(?P<taskId><b>[^/]+</b>)/(?P<subtaskId><b>[^/]+</b>)/options$', views.AvailableOptions.as_view()),
]
然而,您可能希望将 path(…)
[Django-doc] 与 <str:…>
路径转换器一起使用,因此:
urlpatterns = [
path('<<b>str:</b>taskId>/options/', views.AvailableOptions.as_view()),
path('<<b>str:</b>taskId>/<<b>str:</b>subpathId>/options/', views.AvailableOptions.as_view()),
]
需要为 Django 中的任务和子任务提供选项。其中示例任务是 abc_123
,示例子任务是 xyz-987
example.com/abc_123/options
example.com/abc_123/xyz-987/options
我的urls.py文件
urlpatterns = [
url(r'^/(?P<taskId>.+)/options$', views.AvailableOptions.as_view()),
url(r'^/(?P<taskId>.+)/(?P<subtaskId>.+)/options$', views.AvailableOptions.as_view()),
]
只发送taskId时正常。发送任务和子任务 ID 时。该模式将 abc_123/xyz-987
作为 taskId。我需要 url 分别解析为 abc_123
和 xyz-987
作为 taskId 和 subtaskId
你不应该匹配斜线,所以我们可以使用匹配除斜线以外的所有字符组,所以:
urlpatterns = [
url(r'^/(?P<taskId><b>[^/]+</b>)/options$', views.AvailableOptions.as_view()),
url(r'^/(?P<taskId><b>[^/]+</b>)/(?P<subtaskId><b>[^/]+</b>)/options$', views.AvailableOptions.as_view()),
]
然而,您可能希望将 path(…)
[Django-doc] 与 <str:…>
路径转换器一起使用,因此:
urlpatterns = [
path('<<b>str:</b>taskId>/options/', views.AvailableOptions.as_view()),
path('<<b>str:</b>taskId>/<<b>str:</b>subpathId>/options/', views.AvailableOptions.as_view()),
]