2011-04-11 93 views
1

我是新手,使用django,我試圖創建一個允許用戶上傳文件的表單。我使用的代碼與djangoproject教程非常相似,但它不起作用。我的代碼如下:使用django上傳文件

的觀點:

from django import forms 

from django.shortcuts import render_to_response 

from django.http import HttpResponseRedirect 


def upload_file(request): 
    if request.method == 'POST': 

     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['file']) 
      return HttpResponseRedirect('/') 
    else: 
     form = UploadFileForm() 
    return render_to_response('upload_file.html', {'form': form}) 

def handle_uploaded_file(f): 
    destination = open('home/dutzy/Desktop/mysite/name.txt', 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 
    destination.close() 

型號:

從django.db進口車型

from django import forms 

class UploadFileForm(forms.Form): 
    title = forms.CharField(max_length=50) 
    file = forms.FileField() 

和模板:upload_file.html

​​

我在django開發服務器上測試我的代碼。錯誤是:全球名稱'UploadFileForm'未定義,儘管我懷疑還有其他問題。 我已經配置了urls.py爲: (r'^upload/$', 'mysite.upload.views.upload_file')

可能有人請看看我的代碼,並指出我在正確的方向?

謝謝

回答

1

該錯誤是一個簡單的python錯誤。 UploadFileForm is not defined

根據你粘貼的內容,你只從django導入了東西。

你必須從是任何一個到您的視圖功能代碼導入UploadFileForm,所以加"from myproject.myapp.models import UploadFileForm"

要重現你的錯誤:

def global_name_error(): 
    UploadFileForm 
global_name_error() 
[out] NameError: global name 'UploadFileForm' is not defined 
+0

非常感謝。我忘了確實要導入UploadFileForm ..現在它的工作原理是它顯示一個表單來上傳文件,但是當我嘗試按下保存按鈕時,我得到一個Forbidden (403)。 CSRF驗證失敗。請求中止。我已將csrf標記放入模板中,但我不明白問題出在哪裏。你能幫我解決這個問題嗎? – Bigdinrock 2011-04-11 13:44:59

+0

通常,請提出一個單獨的問題,但無論如何:我的表單代碼中沒有看到「{%csrf_token%}」標記。 – 2011-04-11 14:23:28

1

同意虞姬的答案。我也建議在你的視圖中定義UploadFileForm類而不是模型。它屬於表示邏輯,而不是數據/模型。