Django3.1项目URL配置问题:点击按钮后URL重复致404错误
解决Django URL跳转后出现404的问题
看起来你遇到的问题是相对路径导致的URL拼接错误,再加上urls.py里路由名称重复的小问题,咱们一步步来搞定:
问题根源
- 相对路径的坑:你页面里的按钮链接(或者表单action)用了相对路径比如
main/,当你在http://127.0.0.1:8000/main/这个页面时,浏览器会自动把相对路径拼接到当前URL后面,就变成了/main/main/——而你的urls.py里根本没有这个路由,自然返回404。 - 路由名称重复:你的urls.py里两个路由都用了
name='main',这会导致Django的URL反向解析功能混乱,生成的URL可能不符合预期。
解决方案
第一步:修正urls.py的路由名称冲突
打开你的urls.py,把根路径的name改成唯一值(比如home),保证每个路由的名称不重复:
from django.urls import path from django.conf import settings from django.conf.urls.static import static from django.urls import re_path from django.views.static import serve from . import main urlpatterns = [ path('main/', main.main, name='main'), path('', main.main, name='home'), # 修改name为唯一值,避免冲突 ]
第二步:在模板里使用Django的URL反向解析标签
打开你的main.html模板,把按钮的链接(或者表单的action)从相对路径改成{% url %}标签,让Django帮你生成正确的绝对路径:
比如原来的按钮代码如果是:
<button><a href="main/">点击按钮</a></button>
改成:
<button><a href="{% url 'main' %}">点击按钮</a></button>
如果是表单的话:
<form action="main/" method="post">
改成:
<form action="{% url 'main' %}" method="post">
这样不管你当前在哪个页面,Django都会根据urls.py里的name='main'自动生成正确的/main/路径,再也不会出现拼接错误的情况啦。
额外提醒
作为Django新手,尽量养成用{% url %}标签生成URL的习惯——以后如果需要修改路由路径(比如把main/改成dashboard/),只要改urls.py里的路径部分,模板不用手动修改所有链接,能省很多麻烦~
内容的提问来源于stack exchange,提问作者sebo
相关产品推荐
相关产品推荐

