我正在为旅行社制作一个网站。我正在使用模态字段FileField将PDF文件添加到更多页面。
models.py
class Travel(models.Model):
docfile = models.FileField(upload_to='documents')
在管理员中仅上传一个文件并在模板上显示一个文件时,它可以正常工作。
file.html
<div>
<h4><a href="{{ travel.docfile.url }}">{{ travel.docfile.name }}</a></h4>
</div>
但是如果我想每页上传并显示多个文件怎么办? 我现在可以遍历所有文件以获取所有页面的所有文件:
{% if documents %}
<ul>
{% for document in documents %}
<li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No documents.</p>
{% endif %}
view.py
def vacation(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Travel(docfile = request.FILES['docfile'])
newdoc.save()
return HttpResponseRedirect(reverse('myapp.views.vacation'))
else:
form = DocumentForm()
documents = Travel.objects.all()
return render_to_response('myapp/file.html',{'documents': documents, 'form': form},context_instance=RequestContext(request))
但是如何为一个页面上传和显示更多文件?
感谢您的时间。
答案 0 :(得分:0)
有几种方法(我可以看到):
每次最多允许N次上传:因此您只需创建一个包含N个字段的表单来处理它。它不是很花哨(也不是最实用的UI),但它很容易实现。
如果您想让用户上传“动态”数量的文件,您可以实现通过ajax调用的视图。这仍然需要您的用户一次选择一个文件,然后加载它,然后您可以一个接一个地上传多个文件,而无需重新加载整个页面。您甚至可以找到一些可重用的应用程序,如下所示,已经应该实现其中的大部分:https://github.com/skoczen/django-ajax-uploader
您可以使用_$1
字段的HTML5 multiple
属性。即使在这种情况下,也有一个有趣的可重用应用程序:https://github.com/Chive/django-multiupload
希望有所帮助