我正在创建一个用户可以按参数搜索的搜索页面。搜索参数根据他们搜索的类别而变化。大约有100个类别,每个类别都有自己独特的搜索参数。
目前我在视图中有一个if语句,它检查100个类别,然后呈现100个相应表单中的一个,但我觉得它效率不高。什么是最有效/最好的方法呢?
目前我认为这样的事情
if category.id == 1:
# RENDER FORM1
elif category.id == 2:
# RENDER FORM2
elif category.id == 3:
# RENDER FORM3
....
答案 0 :(得分: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]()
你已经在一百多行代码中减少了你的观点。
这是一个非常简化的问题版本,很有可能可以做更多的改进,特别是在百表的声明中。
希望这能带来一些亮点。