2013-05-14 21 views
0

我正在創建一個搜索頁面,用戶可以通過參數進行搜索。搜索參數基於他們正在搜索的類別而改變。大約有100個類別,並且每個類別都有其自己獨特的搜索參數。什麼是渲染基於表的主鍵而改變的模板的最有效方式(Django)

目前我在視圖中有一個if語句,它檢查100個類別,然後呈現100個相應表單中的一個,但我覺得效率不高。什麼是最有效/最好的方式來做到這一點?

目前我認爲像這樣

if category.id == 1: 
    # RENDER FORM1 
elif category.id == 2: 
    # RENDER FORM2 
elif category.id == 3: 
    # RENDER FORM3 
.... 
+0

你可以添加一些代碼,以瞭解你的視圖正在發生什麼嗎? – 2013-05-14 16:03:45

+0

爲什麼要添加代碼以添加代碼?這是一種「最有效的方式」類型的問題,我想我解釋得很好? – user1328021 2013-05-14 17:23:02

+0

此外,爲什麼我會下降?愛情在哪裏?如果有更好的地方發佈這類問題,請告訴我。 – user1328021 2013-05-14 17:29:17

回答

2

我會在這裏給出一個答案,可能使問題簡化一點。如果你實際上有近100個表單,並且需要全部編碼。也許你可以在它宣佈某種全局字典或數組並在每個表單定義的結束,包括他們,例如:

# a dict this way category.id -> form class 
FORM_STORAGE = {} 


Form1(forms.Form) 
    #fields 
    #methods 
FORM_STORAGE[1] = Form1 

Form2(forms.Form) 
    #fields 
    #methods 
FORM_STORAGE[2] = Form2 

... 

然後在你的觀點,你可能會收到一條GET參數,它是完全類別需要如此,而不是渲染:

if category.id == 1: 
    # RENDER FORM1 
elif category.id == 2: 
    # RENDER FORM2 
elif category.id == 3: 
    # RENDER FORM3 
.... 

,你可以這樣做:

# RENDER FORM 
    form = FORM_STORAGE[category.id]() 

有你有在降低您的意見一百多行代碼。

這是一個非常簡化的問題,很可能可以做更多的改進,特別是在百種形式的聲明中。

希望這會帶來一些光。

+0

哦哇,謝謝,這使得很多的意義,我從來沒有想到這一點! – user1328021 2013-05-14 18:03:45

+0

只是說一個表單重用與另一個表單相同的參數。有沒有辦法在那裏進行優化? – user1328021 2013-05-14 18:04:18

+0

我不知道,我從來沒有偶然發現需要編寫這麼多的表單。是表示對象的表單嗎?它們之間有什麼變化? – 2013-05-14 18:12:35

相關問題