0

我正在创建一个搜索页面,用户可以在其中按参数搜索。搜索参数根据他们搜索的类别而变化。大约有 100 个类别,每个类别都有自己独特的搜索参数。

目前我在视图中有一个 if 语句,它检查 100 个类别,然后呈现 100 个相应的表单之一,但我觉得它效率不高。最有效/最好的方法是什么?

目前我认为是这样的

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

1 回答 1

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]()

在那里,您在一百行或更多行代码中减少了您的视图。

这是一个非常简化版的问题,很有可能可以做更多的改进,特别是在百表的声明上。

希望这会带来一些光明。

于 2013-05-14T17:50:41.550 回答