2013-05-14 119 views
0

我必須在django項目中進行一些更改,儘管我熟悉python,但我並沒有與django配合使用。創建類似於另一個的視圖

這是我的情況:

我有一個表「字段」的表。我需要做的是讓用戶根據字段的值對錶格進行排序(是/否)。

我看着views.py,我意識到有是排序根據id表視圖:

users = User.objects.all().order_by('id') 

我的問題是:

  1. 我怎樣才能使視圖根據url參數對錶進行排序?
  2. 我是否必須創建另一個視圖,或者可以使用相同的修改嗎?

回答

2

您可以使用相同的視圖。

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. 
+0

警告:此代碼可能用於對用戶模型的任何字段進行排序,因此如果您有任何與其關聯的敏感數據(例如,用戶帳戶的餘額),則此視圖可能用於獲取某些間接關於它的信息。而且,'order_by'可能跨越ForeignKey關係,所以這個代碼可能被用來猜測你的數據庫的結構。在傳遞給'order_by'之前,你應該檢查'get_param'的值。 – 2013-05-14 17:12:03

+0

這並不一定會使答案錯誤。此外,答案提供了一個總體思路 - 不是完整的解決方案。 OP可以弄清楚他想如何實現它 – karthikr 2013-05-14 17:13:28

0

這取決於你想在你的模板中呈現什麼。如果兩個視圖都會呈現類似的html,那麼最好在通用視圖中重構它們,並根據GET參數進行排序。

我喜歡分離關注點,所以另一種方法可能是重構輔助函數中的視圖代碼,並在每個視圖內用分隔的url來調用它。

如果視圖不呈現類似的html,並且在各個方面都彼此不同,只是它們在某些地方排序某些內容,那麼我認爲最好的方法是分別對兩個視圖進行編碼。

這只是一個考慮問題,但回答你的問題,你可以得到GET params訪問request.GETrequest.POST取決於方法。

希望它有幫助!

相關問題