【问题标题】:Django: Saving images uploaded through ImageFieldDjango:保存通过 ImageField 上传的图像
【发布时间】:2019-04-03 04:43:47
【问题描述】:

我正在尝试使用 ImageField 设置一个接受用户上传图像的 web 应用程序,但我似乎不知道如何保存上传的图像。即使似乎没有任何错误,我的媒体文件夹也是空的。

浏览了很多教程都无济于事。我得到了基本概念,创建了一个表单,模型,在 settings.py 中设置媒体,在视图中处理上传,我得到了一个带有图像上传表单的工作视图,但上传图像并没有保存。

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

urlpatterns = [
    path('embed/', embed, name = 'embed'),
    path('success', success, name = 'success'), 
]


if settings.DEBUG: 
        urlpatterns += static(settings.MEDIA_URL, 
                              document_root=settings.MEDIA_ROOT) 

forms.py

class imguploadform(forms.ModelForm):
    class Meta:
        model = imgupload
        fields = ['title', 'image']

models.py

class imgupload(models.Model):
    title = models.CharField(max_length = 20)
    image = models.ImageField(upload_to="media/images/", default = None)

    def __str__(self):
        return self.title

views.py

def embed(request):
    if request.method == 'POST':
        form = imguploadform(request.POST, request.FILES)

        if form.is_valid():
            newimg = imgupload(title=request.POST['title'], image=request.FILES['image'])
            newimg.save()
            return redirect('success')

    else:
        form = imguploadform()

    return render(request, 'webapp/imgupload.html', {'form' : form})

def success(request):
    return HttpResponse("Successfully uploaded")

imgupload.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Upload Image</title> 
</head> 
<body> 
    <form method = "post" enctype="multipart/form-data"> 
        {% csrf_token %} 
        {{ form.as_p }} 
        <button type="submit">Upload</button> 
    </form> 
</body> 
</html> 

另外需要注意的是,管理面板不显示图像模型

【问题讨论】:

  • 发布您调用表单的 html
  • 用 html @Exprator 编辑
  • imuploadForm() 类的 __init__() 方法是什么?你没有。我在相同的情况下使用了 init 方法,然后我通过了 imge。如果您的问题尚未解决,请告诉我为您发布。

标签: python django


【解决方案1】:

以下代码在我的机器上工作,操作系统是 ubuntu18,带有最新的 django 和枕头

models.py

class Imgupload(models.Model):
    title = models.CharField(max_length=20)
    image = models.ImageField(upload_to="images/", default=None)

    def __str__(self):
        return self.title

views.py

def embed(request):
    if request.method == "POST":
        form = Imguploadform(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect("success")
    else:
        form = Imguploadform()
    img = Imgupload.objects.last()
    return render(request, "webapp/imgupload.html", {"form": form, "img": img})


def success(request):
    return HttpResponse("Successfully uploaded")

imgupload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Image</title>
</head>
<body>
    <form method = "post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Upload</button>
    </form>

    {% if img %}
    Image uploaded latest:
    <img src="{{ img.image.url }}">
    {% endif %}
</body>
</html>

【讨论】:

  • 添加了我使用的html模板
  • 开始了新项目并复制了你的代码,不知道我哪里出错了,但它有效
猜你喜欢
  • 2016-04-23
  • 2012-10-12
  • 2015-02-22
  • 2012-02-08
  • 2018-11-27
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多