这个类(在Django 1.7.4中)我不明白......在form_valid()
函数中:
class ImportCsv(FormView):
template_name = "backend/import.html"
form_class = UploadFileForm
success_url = reverse_lazy("b_import_csv")
csverrors = []
def get_context_data(self, **kwargs):
ctx = super(ImportCsv, self).get_context_data(**kwargs)
ctx.update({
"csverrors" : self.csverrors,
})
return ctx
def form_valid(self, form):
self.csverrors.append("Yeah")
self.template_name+="yeah"
return super(ImportCsv, self).form_valid(form)
这个类只显示了我无法理解的内容:一旦表单有效,就会调用form_valid()
。在那里,我更改了两件事:self.csverrors
和self.template_name
。
然后我重新加载我的页面:模板名称仍然是原始名称,但是csverrors会记住"是的"。我可以一次又一次地提交表单:csverrors不断增长。关键是:我也可以更改self.form_class
和self.success_url
,但所有内容都将在下一次连接中恢复。为什么csverrors仍然存在?
我看不出这两个变量之间的差异以及它们为什么表现不同。在这种特殊情况下我知道函数get_gemplate_names()
,但这是关于实例变量的一般性问题。
目标只是将某些内容放入实例变量中,并相应地将get_success_url()
更改为该变量。问题:该变量不会消失。
答案 0 :(得分:4)
csverrors
次观看次数多少, ImportCsv
都会指向单个列表。此列表是在您定义ImportCsv
类时创建的,并且从不再次重新创建。
因此,您应该在form_valid()
:
def form_valid(self, form):
self.csverrors = ["Yeah"]
...
或者在dispatch()
方法中创建新的空列表:
class ImportCsv(FormView):
def dispatch(self, *args, **kwargs):
self.csverrors = []
return super(ImportCsv, self).dispatch(*args, **kwargs)