用Django上传文件

1 投票
3 回答
3652 浏览
提问于 2025-04-16 15:27

我是一名刚接触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

撰写回答