使用Modal FileField添加PDF文件

时间:2015-11-03 21:22:38

标签: python django pdf

我正在为旅行社制作一个网站。我正在使用模态字段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))

但是如何为一个页面上传和显示更多文件?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

有几种方法(我可以看到):

  1. 每次最多允许N次上传:因此您只需创建一个包含N个字段的表单来处理它。它不是很花哨(也不是最实用的UI),但它很容易实现。

  2. 如果您想让用户上传“动态”数量的文件,您可以实现通过ajax调用的视图。这仍然需要您的用户一次选择一个文件,然后加载它,然后您可以一个接一个地上传多个文件,而无需重新加载整个页面。您甚至可以找到一些可重用的应用程序,如下所示,已经应该实现其中的大部分:https://github.com/skoczen/django-ajax-uploader

  3. 您可以使用_$1字段的HTML5 multiple属性。即使在这种情况下,也有一个有趣的可重用应用程序:https://github.com/Chive/django-multiupload

  4. 希望有所帮助