как игнорировать косую черту в URL-адресе в параметре - PullRequest
0 голосов
/ 21 октября 2019

Я использую версию 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 содержит косую черту, я нене получить весь идентификатор. Например, из приведенного выше URL, если бы я заменил «развернуть» на «выпуск / 19.2.4» http://127.0.0.1:8000/manifest/name:19.2.4:release/19.2.4:1/

"GET /manifest/name:19.2.4:release/19.2.4:1/ HTTP/1.1" 404 3080

Это связано с тем, что в качестве разделителя используется косая черта. Есть ли способ игнорировать эту косую черту внутри параметра some_id? Ожидается получить name: 19.2.4: release / 19.2.4: 1 как some_id в views.py

Примечание: Формат действительногоsome_id состоит из 4 частей, разделенных ":". Например: name: version: branch: num , где только раздел ветви может иметь одну или несколько косых черт (/).

1 Ответ

2 голосов
/ 22 октября 2019

Возможно, вы захотите использовать доброе старое re_path В вашем случае это даст

from django.urls import path, re_path, include
from . import views

urlpatterns = [
   path('manifest/', views.home),
   re_path(r'manifest/(?P<some_id>\w+)/', views.manifest),
]

Хотя ваш URL структурирован, вы пробовали что-то вроде:

path('manifest/<str:name>:<str:version>:<path:branch>:<str:num>/', views.manifest),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...