От параметров, которые передаются через адрес URL, следует отличать параметры, которые передаются через строку запроса. Например, в запросе
http://127.0.0.1:8000/index/3/Tom/
два последних сегмента - 3/Tom/
представляют параметры URL или параметры маршрута. А в запросе
http://127.0.0.1:8000/index?id=3&name=Tom
те же самые значения 3 и Tom представляют параметры строки запроса.
Параметры строки запроса указывается после вопросительного знака ?. Каждый параметр предсталяет пару ключ-значение, напимер, в id=3
:
id - название или ключ параметра, а 3 - его значение. Параметры в строке запроса отделяются друг от друга знаком амперсанда.
Для получения параметров из строки запроса применяется метод request.GET.get(), в которую передается название параметра.
Например, определим в файле views.py следующие функции:
from django.http import HttpResponse def index(request): return HttpResponse("<h2>Главная</h2>") def user(request): age = request.GET.get("age") name = request.GET.get("name") return HttpResponse(f"<h2>Имя: {name} Возраст: {age}</h2>")
Функция user принимает извлекает из строки запроса два параметра: name и age.
В файле urls.py определим следующие маршруты:
from django.urls import path from hello import views urlpatterns = [ path("", views.index), path("user/", views.user) ]
При обращении к приложению по адресу http://127.0.0.1:8000/user/?name=Tom&age=22, параметр name будет иметь значение "Tom", а параметр age - 22.
Однако возможна ситуация, когда для каких-то параметров не будет передано значение. В этом случае мы можем указать для подобных параметров значение по умолчанию. Для этого изменим определение функции user в views.py:
from django.http import HttpResponse def index(request): return HttpResponse("<h2>Главная</h2>") def user(request): age = request.GET.get("age", 0) name = request.GET.get("name", "Undefined") return HttpResponse(f"<h2>Имя: {name} Возраст: {age}</h2>")
Второй параметр функции request.GET.get()
представляет значение по умолчанию для параметра, для которого не задано значение.
Соответственно при обращении по адресу http://127.0.0.1:8000/user/ параметры name и age получат значения по умолчанию: