Skip to main content
 首页 » 编程设计

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

2024年08月20日38yxwkf

我正在尝试从输入 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') 
    

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