GET 參數¶
開始之前¶
任務目標
在這個章節中,我們會完成:
- 了解什麼是 GET 參數
- 使用 GET 參數傳遞資料
- 處理多值參數
什麼是 GET 參數?¶
GET 參數是 URL 中 ? 後面的部分,通常用於篩選、搜尋、分頁等功能。
以這個網址為例:
GET 參數的格式是 key=value,多個參數用 & 連接。
基本用法¶
步驟 1:建立 View¶
practices/views.py
from django.http import HttpResponse
from django.shortcuts import render
def hello_world(request):
return render(request, "practices/hello.html")
def greeting(request):
name = "Django"
return render(request, "practices/greeting.html", {"name": name})
def search(request):
keyword = request.GET.get("q", "")
return HttpResponse(f"Keyword: {keyword}")
步驟 2:設定 URL¶
practices/urls.py
from django.urls import path
from practices import views
urlpatterns = [
path("hello/", views.hello_world, name="hello_world"),
path("greeting/", views.greeting, name="greeting"),
path("search/", views.search, name="search"),
]
步驟 3:測試¶
訪問 http://127.0.0.1:8000/practices/search/?q=django 會顯示 Keyword: django。
試試看:
/practices/search/?q=python→Keyword: python
/practices/search/→keyword:(沒有參數時顯示預設值)
取得 GET 參數的方法¶
| 方法 | 說明 | 範例 |
|---|---|---|
request.GET.get("key") |
取得單一值,不存在時回傳 None |
request.GET.get("q") |
request.GET.get("key", default) |
取得單一值,不存在時回傳預設值 | request.GET.get("q", "") |
request.GET["key"] |
取得單一值,不存在時拋出 KeyError |
request.GET["q"] |
request.GET.getlist("key") |
取得多個值(回傳 list) | request.GET.getlist("tags") |
建議使用 get() 方法
使用 get() 方法可以避免 KeyError,並且可以設定預設值。
多個 GET 參數¶
practices/views.py
from django.http import HttpResponse
from django.shortcuts import render
def hello_world(request):
return render(request, "practices/hello.html")
def greeting(request):
name = "Django"
return render(request, "practices/greeting.html", {"name": name})
def search(request):
keyword = request.GET.get("q", "")
return HttpResponse(f"Keyword: {keyword}")
def product_list(request):
category = request.GET.get("category", "all")
sort = request.GET.get("sort", "newest")
page = request.GET.get("page", "1")
return HttpResponse(f"分類: {category}, 排序: {sort}, 頁數: {page}")
practices/urls.py
from django.urls import path
from practices import views
urlpatterns = [
path("hello/", views.hello_world, name="hello_world"),
path("greeting/", views.greeting, name="greeting"),
path("search/", views.search, name="search"),
path("products/", views.product_list, name="product_list"),
]
訪問 http://127.0.0.1:8000/practices/products/?category=electronics&sort=price&page=2 會顯示:
處理多值參數¶
當同一個參數有多個值時(如多選),使用 getlist():
practices/views.py
from django.http import HttpResponse
from django.shortcuts import render
def hello_world(request):
return render(request, "practices/hello.html")
def greeting(request):
name = "Django"
return render(request, "practices/greeting.html", {"name": name})
def search(request):
keyword = request.GET.get("q", "")
return HttpResponse(f"Keyword: {keyword}")
def product_list(request):
category = request.GET.get("category", "all")
sort = request.GET.get("sort", "newest")
page = request.GET.get("page", "1")
return HttpResponse(f"分類: {category}, 排序: {sort}, 頁數: {page}")
def filter_products(request):
colors = request.GET.getlist("color")
return HttpResponse(f"選擇的顏色: {', '.join(colors)}")
practices/urls.py
from django.urls import path
from practices import views
urlpatterns = [
path("hello/", views.hello_world, name="hello_world"),
path("greeting/", views.greeting, name="greeting"),
path("search/", views.search, name="search"),
path("products/", views.product_list, name="product_list"),
path("products/filter/", views.filter_products, name="product_filter"),
]
訪問 http://127.0.0.1:8000/practices/products/filter/?color=red&color=blue&color=green 會顯示:
任務結束¶
完成!
恭喜你完成了這個章節!現在你已經:
- 了解什麼是 GET 參數
- 使用 GET 參數傳遞資料
- 處理多值參數