Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Django图像上载-图像文件未保存_Django_File Upload_Django Forms_Django Uploads - Fatal编程技术网

简单Django图像上载-图像文件未保存

简单Django图像上载-图像文件未保存,django,file-upload,django-forms,django-uploads,Django,File Upload,Django Forms,Django Uploads,好的,我正在学习如何做一个简单的图像上传表单,将图像上传到MEDIA_ROOT。表单呈现良好,我没有收到任何错误,但是文件没有显示在MEDIA\u根目录中。如果按照文档示例进行操作,但无法使其正常工作,我知道这是因为我没有正确理解django文件上载处理。这是我的代码: forms.py from django import forms class UploadImageForm(forms.Form): image = forms.ImageField() views.py def

好的,我正在学习如何做一个简单的图像上传表单,将图像上传到MEDIA_ROOT。表单呈现良好,我没有收到任何错误,但是文件没有显示在MEDIA\u根目录中。如果按照文档示例进行操作,但无法使其正常工作,我知道这是因为我没有正确理解django文件上载处理。这是我的代码:

forms.py

from django import forms

class UploadImageForm(forms.Form):
    image = forms.ImageField()
views.py

def merchant_image_upload(request):
    if request.method == 'POST':
        form = UploadImageForm(request.POST, request.FILES)
        if form.is_valid():
            FileUploadHandler(request.FILES['image'])
            return HttpResponseRedirect('/dashboard/gallery')
    else:
        form = UploadImageForm()
    return render_to_response('gallery.html', RequestContext(request, {'form': form}))
模板文件

{% extends 'base.html' %}
{% block main %}
    <form action="{% url scvd.views.merchant_image_upload %}" method="post">{% csrf_token %}
        {{ form.image }}
        <input type="submit" value="Upload" />
    </form>
{% endblock %}
{%extends'base.html%}
{%block main%}
{%csrf_令牌%}
{{form.image}
{%endblock%}
希望这是足够的信息得到一些帮助。请让我知道我还能提供什么。谢谢你,我真的很感谢你的帮助。

你需要将它附加到一个模型(作为一个)上,因为它目前没有保存在任何地方。现在处理它可能没有任何问题,但是在视图返回后它会被丢弃


没关系,我没有意识到模型是不必要的。

您不需要像Matt S所说的那样将其附加到模型上,如果表单设置正确,request.FILES包含图像的所有数据

您需要确保在元素中使用
enctype=“multipart/form data”
,如文档中所述:

除此之外,请阅读有关文件上载的文档:

你所需要的一切都有很好的文档记录。希望这有帮助

编辑OP要求提供有关文件上载的更多信息

从文档中:

大多数情况下,您只需将文件数据从请求传递到 将上载的文件绑定到表单中所述的表单。这会 看起来像:

他们提供了一个示例,说明如何编写
处理上传的文件
函数:

def handle_uploaded_file(f):
    destination = open('some/file/name.txt', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

为了上传文件并在request.files中显示,您的表单必须包含enctype=“multipart/form data”,如下所示:

<form action="{% url scvd.views.merchant_image_upload %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.image }}
    <input type="submit" value="Upload" />
</form>

{%csrf_令牌%}
{{form.image}

感谢您的回复。我创建了以下模型:class Gallery(models.model):image=models.ImageField(upload_to='Gallery')现在我如何将此模型附加到表单,以及它与django FileUploadHandler的关系如何?谢谢Jordan。我忘了加上正确的字体。我现在已经做到了。我还忘了安装PIL,这是使用ImageField所需的。我遵循django文档进行文件上传,上面的代码就是我想到的。现在我不知道我做错了什么,但我觉得它必须使用django提供的FileUploadHandler。您能否提供一些正确使用处理程序的见解?我感谢你的帮助。
<form action="{% url scvd.views.merchant_image_upload %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.image }}
    <input type="submit" value="Upload" />
</form>