От параметров, которые передаются через адрес 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 получат значения по умолчанию: