urlconfig - принимает параметр по умолчанию, а не передаваемый - PullRequest
1 голос
/ 20 июня 2019

если я передаю http://127.0.0.1:8000/call/?p=3 и я печатаю num на view.page он печатает 1

#urls.py
urlpatterns = [
    path('call/',views.call),
    path('call/page<int:num>/',views.call),
]

if I pass 127.0.0.1:8000/call/?p=3 and it prints num 1 and not 3.

# View (in blog/views.py)
def page(request, num=1):
  print(num)   // 1

1 Ответ

1 голос
/ 20 июня 2019

Часть ?p=3 - это строка запроса [wiki] , а не path . Эти параметры хранятся в request.GET [Django-doc] , похожем на словарь объекте, за исключением того, что ключ может отображаться на несколько параметров.

Таким образом, существует только один путь:

urlpatterns = [
    path('call/',views.call),
]

Затем вы получаете его с помощью QueryDict.get(..) [Django-doc] , где мы можем предоставить параметр по умолчанию :

def page(request):
  print(request<b>.GET.get(</b>'p', <b>1)</b>)

Если указать:

urlpatterns = [
    path('call/',views.call),
    path('call/<b>page<int:num></b>/',views.call),
]

тогда URL для запуска второго пути будет 127.0.0.1:8000/call/<b>page3</b>.

...