Django文件对比表单提交后未跳转至目标视图,出现404错误求助
问题原因及解决方案
核心原因
- 表单缺少CSRF令牌:Django默认启用
CsrfViewMiddleware,所有POST表单必须包含CSRF验证令牌,否则请求会被拦截,进而触发异常跳转,导致请求方法变为GET,且路径错误(出现未定义的/postURL)。 - URL路径不匹配:你定义的文件对比处理路径是
/compare-files/,但实际请求的是/post,这是CSRF验证失败后的异常行为导致的。
修复步骤
1. 给表单添加CSRF令牌
修改home.html中的表单代码,加入{% csrf_token %}标签:
<form method="post" action="{% url 'compare-files' %}" enctype="multipart/form-data"> {% csrf_token %} <br>file 1: <br> <input type = 'file' name="file1"/> <br>file 2: <br> <input type = 'file' name="file2"/> <br><button type="submit">Compare Files</button> </form>
2. 验证表单渲染路径
提交前查看页面源码,确认表单的action属性值为/compare-files/,确保{% url 'compare-files' %}正确解析了URL名称。
3. 额外检查(可选)
- 确保用户处于登录状态(表单仅在登录后显示,未登录时不会触发提交)。
- 确认
compare_files_view中的POST请求逻辑正确,已处理request.FILES中的文件。
验证修复
添加CSRF令牌后,重新提交表单,请求会以POST方法发送到/compare-files/,触发compare_files_view中的文件对比逻辑,返回正确的对比结果。
内容的提问来源于stack exchange,提问作者Segmentation Fraud
相关产品推荐
相关产品推荐

