验证django中的文件字段URL

时间:2012-01-29 19:26:52

标签: html django

我有一个上传视图:

views.py

def upload(request):

     if request.method == 'POST':
            form = DocumentForm(request.POST, request.FILES)
            if form.is_valid():
                newdoc = Document(docfile = request.FILES['docfile'])
                newdoc.save()

                # Redirect to the document list after POST
                return HttpResponseRedirect(reverse('wiki.views.upload'))
        else:
            form = DocumentForm() # A empty, unbound form

        # Load documents for the list page
        documents = Document.objects.all()

        return render_to_response(
            'wiki/upload.html',
            {'documents': documents, 'form': form},
            context_instance=RequestContext(request)
        )

和我的模板 upload.html

{%extends "base.html"%}

{%block title%}Upload Documents{%endblock%}

{%block content%}
    <!-- List of uploaded documents -->
    {% if documents %}
        <ul>
        {% for document in documents %}
            <a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a>
        {% endfor %}
        </ul>
    {% else %}
        <p>No documents.</p>
    {% endif %}

    <!-- Upload form. Note enctype attribute! -->
    <form action="{% url upload %}" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.non_field_errors }}
        {{ form.docfile.help_text }}
        {{ form.docfile.label_tag }}
        {{ form.docfile.errors }}
        {{ form.docfile }}
        <input type="submit" value="Upload" />
    </form>

{%endblock%}

我在{MEDIA_ROOT}下的指定位置上传了一些文件,它显示在服务器上,但如果我从该文件夹中删除该文件,文件名仍显示在网页上。

如何使用我的模板验证然后显示上传的文件。

2 个答案:

答案 0 :(得分:0)

在视图或模板标签中,您可以拥有下一个代码。 f是文件

try:
    exists_file = f.size()
except IOError:
    exists_file = False

答案 1 :(得分:0)

没有从文件系统到django的反向链接 - 如果您将文件上传到目录,则不会向数据库添加新条目,同样如果从目录中删除文件,则记录不会从数据库中删除。

如果从服务器删除文件,则还需要从数据库中删除该条目。这将使您的文件列表与服务器上实际可用的内容保持同步。