HTTP請求確實支持分配給一個參數(鍵)的多個值。這就是爲什麼人們可以使用它們並且(有時)使用它們。這也是爲什麼Django引入了MultiValueDict
結構。
劃分爲get()
和getlist()
是有益的,因爲它可以幫助您避免錯誤並保持您的視圖代碼簡單。考慮其他行爲,他們都需要更多的代碼做同樣的事情:
get()
總是返回列表。
在大多數情況下,您只需將一個值傳遞給一個密鑰,因此您需要添加[0]
並提供默認值作爲列表。
param = request.GET.get('param', ['default value',])[0]
get()
返回單個數值或者列表,取決於值的數量。
這是HTML選擇中的一個缺點,允許多個選項。人們可以選擇零個,一個或多個值。這意味着你將需要自己轉換單個值列表或相反的方向:
params = request.GET.get('params', [])
# Here you have absolutely no idea if this is a list or a single value
# But you will need only one of that types
# If you need list: ---------------------------------
if not isinstance(params, list):
params = [params,]
objs = TestModel.objects.filter(id__in=params).all()
# If you need single value: -------------------------
if isinstance(params, list):
params = params[0] # Error if params is empty list...
obj = TestModel.objects.get(id=params)
get()
總是返回一個值。那麼在這種情況下,如何在不使用getlist
的情況下處理多個值?
所以要回答你的問題有一個get/getlist
行爲的增值。
對我來說這是一個拙劣的東西 – Goin 2012-02-04 20:23:49