You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django3.1项目URL配置问题:点击按钮后URL重复致404错误

解决Django URL跳转后出现404的问题

看起来你遇到的问题是相对路径导致的URL拼接错误,再加上urls.py里路由名称重复的小问题,咱们一步步来搞定:

问题根源

  1. 相对路径的坑:你页面里的按钮链接(或者表单action)用了相对路径比如main/,当你在http://127.0.0.1:8000/main/这个页面时,浏览器会自动把相对路径拼接到当前URL后面,就变成了/main/main/——而你的urls.py里根本没有这个路由,自然返回404。
  2. 路由名称重复:你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:13:16