2012-01-29 30 views
0

我有一個上傳的看法:驗證FileFiled URL在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}之下並顯示在服務器上,但如果我從該文件夾中刪除該文件,該文件名仍顯示在網頁上。

如何驗證並使用我的模板顯示上傳的文件。

回答

0

在視圖或模板標籤中,您可以擁有下一個代碼。 f是文件

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

@ Goin可以ü請解釋通過將代碼放在我上面的代碼片段..感謝 – sunny 2012-01-30 16:49:55

0

沒有從文件系統中的反向鏈接到Django的 - 如果你上傳文件的目錄,新的條目將不會被添加到數據庫中,同樣,如果你刪除來自目錄的文件,該記錄不會從數據庫中刪除。

如果您從服務器中刪除文件,則還需要從數據庫中刪除該條目。這將使您的文件列表與服務器上實際可用的內容保持同步。

+0

所以你的意思是說,我需要添加一些代碼來檢查文件是否存在,如果不刪除文件後= Document.objects.all()然後返回....如果可能的話,你可以提及代碼捕捉。謝謝 – sunny 2012-01-30 14:19:19