如何从Django的图像文件输入中获取图像

3

我希望能够从ImageField文件输入中获取图像,然后在模板中显示图像,并最终将图像保存到模型imageField中。

file_image = request.POST.get('image')只会获取图像名称,如何获取实际的图像呢?我需要先上传图像到NamedTemporaryFile()吗?

视图

def uploadImageView(request):
    form = UploadImageForm(request.POST or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid:
            file_image = request.POST.get('image')
            request.session['file_image'] = file_image
            return redirect('image:create')


def saveImageView(request):
    uploaded_image = request.session.get('file_image')

    form = Form(request.POST or None, request.FILES or None,)

    if form.is_valid():
        instance = form_create.save(commit=False)
        instance.image = uploaded_image
        inastance.save()

模板

首次视图模板

  <form method="POST" action="">
    {% csrf_token %}
    <input type="submit"></input>
    {{ form }}
  </form>

第二视图模板

  <form method="POST" action="">
    {% csrf_token %}
    {{ form }}
  <input type="submit"></input>
  </form>

  {{ form.instance.image.url }}

1
不,你不能使用request.POST.get('image')来保存图像。相反,应该使用request.FILES.get('image')或forms.cleaned_data.get('image')来保存图像。 - Aniket Pawar
谢谢您的评论,我尝试了您的解决方案,但是我得到了“None”。 - lolz
2
在你的 <form> 中添加 'enctype=multipart/form-data'。 - Aniket Pawar
谢谢,但是现在我遇到了一个错误:TypeError: <InMemoryUploadedFile: image.jpg (image/jpeg)> 不可序列化为 JSON。 - lolz
为什么要使用两个视图来保存上传的图片?你可以在一个视图中保存上传的图片。 - Aniket Pawar
因为我想在模板中显示所选的图像。所以我必须先获取图像,然后在第二个视图中显示它,否则会提示 ImageField 没有选择任何内容,并且无法显示 {{ form.instance.image.url }}。 - lolz
2个回答

2
为了在您的HTML文件中获取输入的图像,请使用以下内容:
request.FILES["input name "]

1
为了上传文件,您需要在HTML表单中添加enctype='multipart/form-data'。因此,您的表单应如下所示:
  <form method="POST" action="" enctype='multipart/form-data'>
    {% csrf_token %}
    <input type="submit"></input>
    {{ form }}
  </form>

在您的视图中,您需要访问request.FILES来获取上传的文件。您的上传图像视图应该是:

def uploadImageView(request):
    form = UploadImageForm(request.POST or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            # rest of the code.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接