用Django上传文件
我是一名刚接触Django的新手,正在尝试创建一个表单,让用户可以上传文件。我用的代码和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
<form enctype="multipart/form-data" method="post" action="/upload_file/">
<table>
<tr>
<td>
<b> {{ form.file.label_tag }}</b> {{ form.file}}
</td>
</tr>
<tr>
<td>
<input type="hidden" value="title" name="title" id="title" />
<input type="submit" value="Save" id="Save"/>
</td>
</tr>
</table>
</form>
我在Django开发服务器上测试我的代码,出现的错误是:全局名称 'UploadFileForm' 未定义,虽然我怀疑还有其他问题。
我已经把urls.py配置成这样:
(r'^upload/$', 'mysite.upload.views.upload_file')
有没有人能帮我看看我的代码,给我一些正确的方向?
谢谢!
3 个回答
1
我同意Yuji的回答。我也建议你在视图里定义UploadFileForm类,而不是在模型里。因为这个类是和展示逻辑有关的,不是和数据或模型有关的。
1
这个错误是一个简单的Python错误。UploadFileForm未定义
根据你提供的内容,你只从Django导入了一些东西。
你需要从你定义UploadFileForm
的地方导入它到你的视图函数代码中,所以要加上"from myproject.myapp.models import UploadFileForm"
要重现你的错误:
def global_name_error():
UploadFileForm
global_name_error()
[out] NameError: global name 'UploadFileForm' is not defined