【问题标题】:URL resolution in Django with two patternsDjango中的URL解析有两种模式
【发布时间】:2021-07-09 21:09:53
【问题描述】:

在 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_123xyz-987 分别作为 taskId 和 subtaskId

【问题讨论】:

  • r'^/(?P&lt;taskId&gt;.+)/options$' 更改为 r'^/(?P&lt;taskId&gt;[^/]+)/options$'。其实r'^/(?P&lt;taskId&gt;.+)/(?P&lt;subtaskId&gt;.+)/options$'也改成r'^/(?P&lt;taskId&gt;[^/]+)/(?P&lt;subtaskId&gt;[^/]+)/options$'比较好
  • 更改网址有效

标签: python django regex url django-urls


【解决方案1】:

你不应该匹配斜杠,所以我们可以使用一个匹配除斜杠之外的所有字符的字符组,所以:

urlpatterns = [
    url(r'^/(?P<taskId>[^/]+)/options$', views.AvailableOptions.as_view()),
    url(r'^/(?P<taskId>[^/]+)/(?P<subtaskId>[^/]+)/options$', views.AvailableOptions.as_view()),
]

但是,您可能希望将path(…) [Django-doc]&lt;str:…&gt; 路径转换器一起使用,因此:

urlpatterns = [
    path('<str:taskId>/options/', views.AvailableOptions.as_view()),
    path('<str:taskId>/<str:subpathId>/options/', views.AvailableOptions.as_view()),
]

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 2014-01-03
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多