【发布时间】:2019-10-21 20:14:14
【问题描述】:
我使用的是 django 版本 2.2.5。下面是我的 urls.py
from django.urls import path, include
from . import views
urlpatterns = [
path('manifest/', views.home),
path('manifest/<str:some_id>/', views.manifest),
]
当 some_id 不包含任何正斜杠(/)时,它可以正常工作。例如。 http://127.0.0.1:8000/manifest/name:19.2.4:develop:1/
在views.py的以下清单函数中,我可以获取some_id
def manifest(request, some_id):
print(some_id)
##prints below:
##[21/Oct/2019 19:36:55] "GET /manifest/name:19.2.4:develop:1 HTTP/1.1" 301 0
##name:19.2.4:develop:1
但是,当 some_id 中包含正斜杠时,我没有得到整个 id。例如,如果我将“develop”替换为“release/19.2.4”http://127.0.0.1:8000/manifest/name:19.2.4:release/19.2.4:1/
,则从上面的 URL"GET /manifest/name:19.2.4:release/19.2.4:1/ HTTP/1.1" 404 3080
这是因为正斜杠被用作分隔符。有什么方法可以忽略 some_id 参数中的这个正斜杠吗?期望在views.py中获得 name:19.2.4:release/19.2.4:1 作为 some_id
注意:有效的 some_id 的格式是它有 4 个部分,由“:”分隔。例如:name:version:branch:num,其中只有分支部分可以有一个或多个斜杠(/)。
【问题讨论】:
-
您可以具体并使用regex 而不仅仅是路径,或者您可以使用
path而不是str作为path converter,它允许使用正斜杠。 -
@dirkgroten。谢谢。
path工作。
标签: python django django-rest-framework restful-url