HTML模板
(编辑)
<!DOCTYPE html>
< html>
< head>
< meta charset =utf-8>
< title>< / title>
< / head>
< body>
< form action ={%urllist%}method =postenctype =multipart / form-data>
{%csrf_token%}
< p> {{form.non_field_errors}}< / p>
< p> {{form.docfile.label_tag}} {{form.docfile.help_text}}< / p>
< p>
{{form.docfile.errors}}
{{form.docfile}}
< / p>
< p> {{form.non_field_errors}}< / p>
< p> {{form.docfile.label_tag}} {{form.docfile.help_text}}< / p>
< p>
{{form.docfile.errors}}
{{form.docfile}}
< / p>
< p>< input type =submitvalue =上传/>< / p>
< / form>
<! - 检查错误
{%if form.errors%}
{%表单中的字段%}
{%表示字段中的错误。错误%}
< div class =alert alert-error>
< strong> {{error | escape}}< / strong>
< / div>
{%endfor%}
{%endfor%}
{%for form.non_field_errors%}
< div class =alert alert-error>
< strong> {{error | escape}}< / strong>
< / div>
{%endfor%}
{%endif%} - >
< / body>
views.py
# - * - 编码:utf-8 - * -
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
$来自myproject.myapp.models的文件
从myproject.myapp.forms导入文件
从myproject.myapp.forms导入DocumentForm
DocumentForm2
def list(请求)
#处理文件上传
如果request.method =='POST':
form = DocumentForm(request.POST,prefix =form)
form2 = DocumentForm2 (request.POST,prefix =form2)
如果form.is_valid()或form2.is_valid():
newdoc = Document(docfile = request.FILES ['docfile'] )
newdoc.save()
#在POST之后重定向到文档列表
return HttpRes ponseRedirect(reverse('myproject.myapp.views.list'))
else:
form = DocumentForm(prefix =form)#一个空的,未绑定的形式
form2 = DocumentForm2 =form2)#一个空的,未绑定的表单
#加载列表页面的文档
documents = Document.objects.all()
#渲染列表页面与文件和表单
返回render_to_response(
'list.html',
{'documents':documents,'form':form},
context_instance = RequestContext请求)
)
forms.py
# - * - 编码:utf-8 - * -
from django import forms
class DocumentForm(forms.Form):
docfile = forms.FileField(
label ='选择一个文件'
class DocumentForm2(forms.Form):
docfile2 = forms.FileField(
label ='选择一个文件'
)
解决方案
首先,您的意见中定义了2个表单方法
表单
和 form2
,但您只需将表单
添加到您的上下文。
其次,您不要将两个表单放在两个不同的< form>
标签中。你应该把它们放在一起,所以你可以同时提交它们。
第三,不相关,但你不能命名你的视图方法列表
。这是数据结构 list
的django关键字,如果您尝试在其他函数中使用 list
,可能会遇到很大的麻烦在您的视图文件中。
编辑
您继续使用变量 {{form.something}}
但是你有2个表单,所以你只是渲染第一个表单两次,但完全忽略了第二个表单。你应该:
< form action ={%urllist%}method =postenctype =多部分/格式数据>
{%csrf_token%}
{{form.as_p}}
{{form2.as_p}}
< p>< input type =submitvalue =上传/>< / p为H.
< / form>
ReEdit:
我不知道是什么导致403发生,但是让我们尝试用 render
替换 render_to_response
/ p>
从django.shortcuts import render
def list(request):
#你的代码这里
return render(request,'list.html',{'documents':documents,'form':form,'form2':form2})
I know this question has been answered before on this site, but for the life of me I can't figure it out. I want to submit two forms at once, with one submit button. Please, can anybody identify what is wrong with my code, this is driving me insane.
HTML template
(edited)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="{% url "list" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p><input type="submit" value="Upload"/></p>
</form>
<!-- check error
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %} -->
</body>
views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from myproject.myapp.models import Document
from myproject.myapp.forms import DocumentForm
from myproject.myapp.forms import DocumentForm2
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, prefix="form")
form2 = DocumentForm2(request.POST, prefix="form2")
if form.is_valid() or form2.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('myproject.myapp.views.list'))
else:
form = DocumentForm(prefix="form") # A empty, unbound form
form2 = DocumentForm2(prefix="form2") # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
forms.py
# -*- coding: utf-8 -*-
from django import forms
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file'
)
class DocumentForm2(forms.Form):
docfile2 = forms.FileField(
label='Select a file'
)
解决方案
First, you have 2 forms defined in your views method
form
and form2
, but you only add form
to your context.
Secondly, you don't put 2 forms in two different
<form>
tags. You should put them in one so you could submit them at the same time.
Thirdly, not related, but you CANNOT name your views method
list
. That's a django keyword for data structure list
, you could run into huge trouble if you try to use list
in other functions in your views file.
Edit:
You keep using variable
{{ form.something }}
but you have 2 forms, so you just render the first form twice but completely ignored the second form. You should:
<form action="{% url "list" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
{{ form2.as_p }}
<p><input type="submit" value="Upload"/></p>
</form>
ReEdit:
I'm not sure what caused the 403 to happen, but let's try replace
render_to_response
with render
:
from django.shortcuts import render
def list(request):
# your code here
return render(request, 'list.html', {'documents': documents, 'form': form, 'form2': form2})
这篇关于Django多个表单提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
08-22 22:45