Django使用{% include %}引入上传模板后文件上传失败问题排查
文件上传失败问题排查与解决
问题现象
- 直接访问
/upload_view/打开file_upload.html模板上传文件时,服务器日志显示:
文件可成功保存至media根目录。[13/Nov/2022 08:00:54] "POST /upload_view/ HTTP/1.1" 200 948 - 通过访问
/或/index/打开引入了file_upload.html的index.html模板上传文件时,服务器日志显示:
文件未保存到media目录。[13/Nov/2022 08:02:59] "POST / HTTP/1.1" 200 1538
核心原因
表单未指定action属性,导致提交路径随当前页面变化:
- 直接访问
/upload_view/时,表单默认提交到当前路径/upload_view/,对应处理上传逻辑的upload_view视图,因此能正常保存文件。 - 在index.html页面时,当前路径是
/或/index/,表单默认提交到当前路径,对应index_view视图,但该视图没有任何处理POST请求和文件上传的代码,所以文件不会被保存。
解决方法
给表单明确指定提交目标URL,确保无论表单在哪引入,都能提交到正确的处理视图。修改file_upload.html中的表单代码:
{% block content %} <p>Upload</p> <form method="POST" enctype="multipart/form-data" action="{% url 'fileupload' %}"> {% csrf_token %} <input type="file" name="filename"> <button type="submit"> Upload file</button> </form> {% endblock %}
这里用Django的{% url %}标签根据URL配置中name='fileupload'的路由生成正确的URL,避免硬编码路径。
内容的提问来源于stack exchange,提问作者Tiago Mendes
相关产品推荐
相关产品推荐

