python - 如何从 django 表单 ImageField 输入中获取图像

标签 python django

我正在尝试从输入 ImageFile 中获取图像以显示在模板中,并将该 ImageFile 保存到模型 ImageField。

下面的代码会报错:

upload_img_temp.write(uploaded_image)
TypeError: a bytes-like object is required, not 'str'

表单

class UploadImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ['image']

查看

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

def imageCreateView(request):
    uploaded_image = request.session.get('image')
    upload_img_temp = NamedTemporaryFile()
    upload_img_temp.write(uploaded_image)
    upload_img_temp.flush()

    form_create = ImageModelCreateForm(request.POST or None, request.FILES or None,)

    if form_create.is_valid():
        instance = form_create.save(commit=False)
        instance.image = upload_img_temp

模板

<img class="image" src="{{ upload_img_temp }}">

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

型号

def upload_location(instance, filename):
    filebase, extension = filename.split(".")
    return "%s/%s.%s" %('picx', uuid.uuid4(), extension)

class Image(models.Model):
    image           = models.ImageField(
                        upload_to=upload_location,
                        null=False,
                        blank=False,
                        )

最佳答案

所以你有多个问题。

  1. <form method="POST" action="" enctype='multipart/form-data' >

您需要添加 enctype='multipart/form-data'form否则将不接受任何文件。

  1. 要显示图像,您需要像 <img class="image" src="{{Image.image.url}}"> 这样的东西请注意,“图像”必须是您在 views.py 上下文部分为此模板定义的有效参数。它是对您的模型的引用,第二个“图像”关键字是指您的模型属性“图像”。 .url是必需的。
  2. 将您的 views.py 更改为类似的内容:

    def uploadG(request):
      form = PostForm(request.POST or None, request.FILES or None)
      if form.is_valid():
        print ("form was valid TEST") #controll your console and check if that statement appears when you click upload.
        instance = form.save(commit = False)
        ....
        instance.save()
        messages.success(request, 'You uploaded it')
    

希望对您有所帮助。如果没有留下评论

关于python - 如何从 django 表单 ImageField 输入中获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45076642/

相关文章:

python - 我自己的 RPC 服务器 API key

django - 访问 Docker 镜像中的 Django STATIC 资源时出现 404 错误

python - 无法在 Pycharm 的 python 控制台上导入模型

python - Label Encoding() 与 One Hot Encoding() (sklearn,pandas) 建议

python - 在 Plotly Python 中使用时间 slider 绘制连续直方图

python - 如何使用正则表达式对列标题进行分组?

python - 在python中修改符号链接(symbolic link)

python - Django 'str' 对象在 rest_framework 中没有属性 'values'

python - django根据另一个查询集的计数过滤查询集

python - 为 sphinx 设置 Django 设置(文档)