我必須在django項目中進行一些更改,儘管我熟悉python,但我並沒有與django配合使用。創建類似於另一個的視圖
這是我的情況:
我有一個表「字段」的表。我需要做的是讓用戶根據字段的值對錶格進行排序(是/否)。
我看着views.py,我意識到有是排序根據id表視圖:
users = User.objects.all().order_by('id')
我的問題是:
- 我怎樣才能使視圖根據url參數對錶進行排序?
- 我是否必須創建另一個視圖,或者可以使用相同的修改嗎?
我必須在django項目中進行一些更改,儘管我熟悉python,但我並沒有與django配合使用。創建類似於另一個的視圖
這是我的情況:
我有一個表「字段」的表。我需要做的是讓用戶根據字段的值對錶格進行排序(是/否)。
我看着views.py,我意識到有是排序根據id表視圖:
users = User.objects.all().order_by('id')
我的問題是:
您可以使用相同的視圖。
def myView(request):
get_param = request.GET.get('my_param', 'id')
#some more processing
users = User.objects.order_by(get_param) #note - you dont need the `all()`
#rest of the code here.
這取決於你想在你的模板中呈現什麼。如果兩個視圖都會呈現類似的html,那麼最好在通用視圖中重構它們,並根據GET
參數進行排序。
我喜歡分離關注點,所以另一種方法可能是重構輔助函數中的視圖代碼,並在每個視圖內用分隔的url來調用它。
如果視圖不呈現類似的html,並且在各個方面都彼此不同,只是它們在某些地方排序某些內容,那麼我認爲最好的方法是分別對兩個視圖進行編碼。
這只是一個考慮問題,但回答你的問題,你可以得到GET
params訪問request.GET
或request.POST
取決於方法。
希望它有幫助!
警告:此代碼可能用於對用戶模型的任何字段進行排序,因此如果您有任何與其關聯的敏感數據(例如,用戶帳戶的餘額),則此視圖可能用於獲取某些間接關於它的信息。而且,'order_by'可能跨越ForeignKey關係,所以這個代碼可能被用來猜測你的數據庫的結構。在傳遞給'order_by'之前,你應該檢查'get_param'的值。 – 2013-05-14 17:12:03
這並不一定會使答案錯誤。此外,答案提供了一個總體思路 - 不是完整的解決方案。 OP可以弄清楚他想如何實現它 – karthikr 2013-05-14 17:13:28