Python 多文件上传Django
我已根据本指南创建了一个上传文件的表单: 我想调整它以允许多个文件上传。我尝试过几种方法,但运气不太好。谢谢你的建议 上传表单Python 多文件上传Django,python,django,upload,Python,Django,Upload,我已根据本指南创建了一个上传文件的表单: 我想调整它以允许多个文件上传。我尝试过几种方法,但运气不太好。谢谢你的建议 上传表单 <form action="{% url 'list' %}" method="post" enctype="multipart/form-data"> {% csrf_token %} <p>{{ form.non_field_errors }}</p> <p&g
<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><input type="submit" value="Upload" /></p>
</form>
forms.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
help_text='max. 42 megabytes',
)
我假设您希望在一个页面上显示多个上载小部件。如果没有附加组件,用户将无法选择多个图像并同时上载所有图像。如果您希望用户能够在同一页面上上载5个图像,则必须有5个图像上载字段或小部件。目前,您的表单只有一个 这可以通过使用表单集来实现。从本质上讲,表单集是允许您在同一页面上显示同一表单的多个实例的东西
请阅读表单集,如果您对此有任何疑问,请告知我们。我已经用基本的表单集功能实现了您在我的网站上想要做的事情,效果很好。您可以在表单中的文件输入中添加“multiple”属性。您可以控制或按住shift键选择所需的文件
<input type="file" name="files" multiple />
你可以这样做 forms.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
help_text='max. 42 megabytes',
)
views.py
def list(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
return HttpResponseRedirect(reverse('list'))
else:
form = DocumentForm() # A empty, unbound form
documents = Document.objects.all()
return render(
request,
'check/list.html',
{'documents': documents, 'form': form}
)
参考资料:谢谢。这似乎奏效了。我好像把文件放在“文件”里了。现在我只需要解决如何将它们写入磁盘。非常感谢。
from django import forms
class FileFieldForm(forms.Form):
file_field = forms.FileField(
widget=forms.ClearableFileInput(attrs={'multiple': True}))
from django.views.generic.edit import FormView
from .forms import FileFieldForm
class FileFieldView(FormView):
form_class = FileFieldForm
template_name = 'upload.html' # Replace with your template.
success_url = '...' # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('file_field')
if form.is_valid():
for f in files:
... # Do something with each file.
return self.form_valid(form)
else:
return self.form_invalid(form)