gpt4 book ai didi

python - Django 基于类的 View 实例变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:48 25 4
gpt4 key购买 nike

这是一个类(在 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.csverrorsself.template_name

然后我重新加载我的页面:模板名称仍然是原来的,但 csverrors 记住了"is"。我可以一次又一次地提交表单:csverrors 不断增长。重点是:我还可以更改 self.form_classself.success_url,但下一次连接时一切都会恢复。为什么 csverrors 仍然存在?

我看不出这两个变量之间的差异以及它们为何表现不同。我知道在这种特殊情况下的函数 get_gemplate_names(),但这是关于实例变量的一般问题。

目标只是将一些东西放入实例变量中,并根据该变量更改 get_success_url()。问题:该变量不会消失。

最佳答案

csverrors 指向单个列表,而不管 ImportCsv View 的数量。此列表是在您定义 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)

关于python - Django 基于类的 View 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com