Django表单无法上传图片问题求助
Django表单图片上传失效问题解决方法
你的问题出在两个关键地方,都是文件上传的基础配置缺失:
1. 模板表单未设置文件上传编码类型
HTML表单上传文件时,必须指定enctype="multipart/form-data",否则浏览器不会把文件数据发送到后端。原模板的form标签缺少这个属性,导致图片完全没被提交。
修改后的create_post.html代码:
{% extends "base/base.html" %} {% block content %} <form method="POST" action="{% url 'create_post' %}" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">Create Post</button> </form> {% endblock %}
2. 视图未传递文件数据到表单
处理POST请求时,初始化PostForm必须同时传入request.POST和request.FILES,否则表单无法读取上传的文件。原视图只传了request.POST,所以post_image字段无法获取到上传的文件。
修改后的create_post视图代码:
def create_post(request): if request.method == 'POST': # 同时传入POST和FILES数据 form = PostForm(request.POST, request.FILES) if form.is_valid(): author = request.user title = form.cleaned_data['title'] content = form.cleaned_data['content'] post_image = form.cleaned_data['post_image'] post = Post.objects.create(author=author, title=title, content=content, post_image=post_image) return redirect("home") form = PostForm() return render(request=request, template_name="post/create_post.html", context={"form": form})
额外优化(可选)
你可以简化视图逻辑,利用ModelForm的save()方法,避免手动提取字段:
def create_post(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): post = form.save(commit=False) post.author = request.user post.save() return redirect("home") form = PostForm() return render(request, "post/create_post.html", {"form": form})
内容的提问来源于stack exchange,提问作者Franciso Reyna
相关产品推荐
相关产品推荐

