Django 上下文变量在刷新时呈现上一个值
我创建了一个表单,它接受文件上传,并在发布时从文件中获取一些有趣的数据 但是,在刷新页面时,表单将返回其初始状态,但上一个文件中的数据将保留。我怎么修理它 这是我的密码: forms.pyDjango 上下文变量在刷新时呈现上一个值,django,django-forms,Django,Django Forms,我创建了一个表单,它接受文件上传,并在发布时从文件中获取一些有趣的数据 但是,在刷新页面时,表单将返回其初始状态,但上一个文件中的数据将保留。我怎么修理它 这是我的密码: forms.py choices=(('all','all'), (‘一’、‘一’) 课堂票证详情(forms.Form): file=forms.FileField() type=forms.ChoiceField(choices=choices) 定义初始化(self,*args,**kwargs): super() 视
choices=(('all','all'),
(‘一’、‘一’)
课堂票证详情(forms.Form):
file=forms.FileField()
type=forms.ChoiceField(choices=choices)
定义初始化(self,*args,**kwargs):
super()
视图.py
def home(请求):
详细信息=[]
如果request.method==“POST”:
表单=TicketDetailForm(request.POST、request.FILES)
如果form.is_有效():
如果form.cleaned_数据['type']=='all':
file=form.cleaned_data['file'].read()
detail.append([str(文件'utf-8')]))
#有关该文件的更多解决方法
其他:
表单=TicketDetailForm()
返回呈现(请求'home.html',{'form':表单,
“详细信息”:详细信息})
home.html
{%extends'base.html%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
{%if详细信息%}
详情如下:
{d详细信息中的%d}
{{d}
{%endif%}
{%endif%}
{%endblock%}
这是因为在刷新页面时重新发布表单,因为即使表单有效,视图也只呈现模板。服务器的正确行为是在成功提交POST
后始终重定向。换句话说,在if form.is\u valid()
中,您应该以返回重定向('home')
结束
您的视图应始终执行以下操作:
- 对于GET请求,呈现模板
- 对于POST请求和无效表单,请呈现模板(使用无效表单,以便用户可以修复错误)。在这里点击刷新是可以的,它只会重新提交无效的表单,因此不会引起问题
- 对于POST请求和有效表单,请重定向,以便最后一个请求是GET请求,并且用户在刷新时无法重新提交。这也避免了再次呈现有效表单
detail
是否以某种方式保存到您的数据库中?如果不是,这意味着这只是一次性的?用户提交某些内容以查看结果,但如果他们离开页面,则会丢失结果?完全正确!我这里不使用db。