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

Django访问URL出现多余斜杠触发404错误的原因及解决方法

Django路径双斜杠导致404问题解决方案

问题根因

  1. 模板手动添加多余斜杠:你的product_list.html中跳转链接在{{ instance.get_absolute_url }}后额外拼接了一个斜杠,而Django模型的get_absolute_url方法生成的路径默认已携带末尾斜杠,两者叠加就产生了/products/1//的双斜杠路径,与路由定义的products/<int:id>/规则不匹配。
  2. 应用路由冗余配置:应用内urls.py定义了3个空路径的路由,会引发路由匹配优先级混乱,属于不规范配置,可能导致其他路径异常。

修复步骤

  1. 修改模板代码,移除手动添加的末尾斜杠
{% for instance in object_list %}
    <p>{{ instance.id }} - <a href="{{ instance.get_absolute_url }}">{{ instance.title }}</a></p>
{% endfor %}

注意:Django默认开启APPEND_SLASH配置,会自动给不带末尾斜杠的合法路径补全斜杠,不需要手动在模板中拼接斜杠

  1. 清理应用路由的冗余配置,避免同路径多视图冲突,修改后的product/urls.py参考如下:
from django.urls import path
from .views import (
    product_detail_view,
    product_create_view,
    render_initial_data,
    dynamic_lookup_view,
    product_delete_view,
    product_list_view)

app_name = 'product'
urlpatterns = [
    path('', product_list_view, name='product-list'),
    # 给原空路径的视图分配独立路径,避免冲突
    path('create/', product_create_view, name='product-create'),
    path('<int:id>/', dynamic_lookup_view, name='product-detail'),
    path('<int:id>/delete/', product_delete_view, name='product-delete'),
    path('base-detail/', product_detail_view, name='product-base-detail'),
]
  1. 可选校验:确认Product模型的get_absolute_url方法定义规范,示例如下:
from django.urls import reverse
from django.db import models

class Product(models.Model):
    # 你的模型原有字段
    def get_absolute_url(self):
        return reverse("product:product-detail", kwargs={"id": self.id})

内容的提问来源于stack exchange,提问作者Badabuska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:39:01