python - Django 中的 URL 解析有两种模式

标签 python django regex url django-urls

需要为 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时工作正常。当任务和 subtaskId 都发送时。该模式采用 abc_123/xyz-987 作为任务 ID。我需要将 url 分别解析为 abc_123xyz-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()),
]

关于python - Django 中的 URL 解析有两种模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67098154/

相关文章:

python - 如何使用 Python 2.7 从以下 JSON 文件中读取特定值 ("text")?

python - ._GLOBAL_DEFAULT_TIMEOUT 发生在简单的 urlopen 上

Python/Numpy : Build 2D array without adding duplicate rows (for triangular mesh)

django - 如何将django rest api中的用户与Auth0同步

django - docker容器之间的端口转发

python - 使用 Python 3、正则表达式和随机数解析文本文件

java - 字符串中所有数字的动态递增

python - 如何一次将一个超大文件读入 numpy 数组 N 行

python - 在 virtualenv 中运行 createsuperuser 时出错

regex - SPARQL 中的 dc :Creator string literal vs. 正则表达式过滤器