Django新手访问/signup路径POST URL无尾部斜杠RuntimeError求助
解决方案
这个报错是Django的URL规范机制导致的,默认开启APPEND_SLASH配置时,Django会要求路由匹配的路径末尾带斜杠,POST请求重定向时会丢失请求体数据,所以直接抛出错误避免数据丢失,你可以按下面的方案解决:
方案1(最推荐):修改signup页面的表单提交路径
你现在出现报错的原因是signup页的表单action属性写的是/signup(无尾斜杠),和你urls.py中定义的signup/(有尾斜杠)不匹配。
- 优先使用Django内置的
url模板标签生成路径,不要硬编码路径,直接写{% url 'handleSignUp' %}即可,Django会自动生成带尾斜杠的正确路径,示例:
<form method="POST" action="{% url 'handleSignUp' %}"> {% csrf_token %} <!-- 表单其他内容 --> </form>
- 如果要硬编码路径,直接给
action属性的值末尾加斜杠,写成/signup/即可。
方案2(不推荐):关闭APPEND_SLASH配置
如果你不需要Django自动补全尾斜杠的逻辑,可以在项目的settings.py中添加配置:
APPEND_SLASH = False
这个方案会全局关闭尾斜杠校验,所有路由都要严格匹配路径,后续容易出现404问题,非必要不建议使用。
额外优化建议
你现有contact.html里的表单硬编码了/contact/路径,虽然暂时能用,但还是建议替换成{% url 'contact' %},后续如果要调整urls.py里的路径规则,不用修改模板代码,维护成本更低。
内容的提问来源于stack exchange,提问作者Arabindra Dhami
相关产品推荐
相关产品推荐

