Django DetailView访问出现404错误,URL末尾多单引号求助
问题排查与解决方案
核心问题分析
你遇到的404错误是因为生成的URL末尾被意外添加了单引号(URL编码后为%27),同时代码中存在URL反向解析的错误,两者共同导致了访问失败。
具体修复步骤
1. 修正模型中的URL反向解析错误
你的Customer模型里的get_absolute_url方法使用了错误的URL名称,导致反向解析无法正确生成详情页URL:
原代码:
def get_absolute_url(self): return reverse("custome", kwargs={"slug": self.slug})
修改为:
def get_absolute_url(self): return reverse("nrn:view-customer", kwargs={"slug": self.slug})
说明:urls.py中详情页的URL名称是view-customer,且属于nrn这个应用命名空间,必须用app_name:url_name的格式进行反向解析。
2. 移除URL末尾的多余单引号
URL末尾的单引号(%27)大概率来自首页模板(index.html)的链接写法错误。请检查首页中生成详情页链接的代码,比如是否写成了类似:
<a href="{% url 'nrn:view-customer' slug=custome.slug'%'}">查看客户详情</a>
需要移除多余的单引号,修正为:
<a href="{% url 'nrn:view-customer' slug=custome.slug %}">查看客户详情</a>
3. 补充缺失的模型字段(可选但必要)
你的Customer模型Meta类中使用了-date_creation排序,但代码里未定义该字段,会导致数据库查询错误。需要添加该字段:
date_creation = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
添加后执行数据库迁移命令:
python manage.py makemigrations python manage.py migrate
验证修复
完成上述修改后:
- 重新启动服务
- 访问客户列表页,点击详情链接,此时生成的URL应该不再包含末尾的单引号,能正常加载详情页
内容的提问来源于stack exchange,提问作者papis
相关产品推荐
相关产品推荐

