什么是呈现基于表的主键更改的模板的最有效方法(Django)

时间:2013-05-14 15:07:11

标签: django django-views

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

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

目前我认为这样的事情

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

1 个答案:

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

你已经在一百多行代码中减少了你的观点。

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

希望这能带来一些亮点。