You need to enable JavaScript to run this app. Django基于slug与get_absolute_url实现ListView跳转DetailView无报错失效问题
优惠活动
大模型
产品
解决方案
定价
更多

Django基于slug与get_absolute_url实现ListView跳转DetailView无报错失效问题

问题定位与修正方案

跳转失效且无任何报错的核心原因是多处代码拼写错误、模板变量引用错误,具体问题及修正方式如下:

1. 模型层URL生成逻辑错误

首先需要在模型文件顶部导入reverse函数:from django.urls import reverse
原get_absolute_url方法存在两处拼写问题:

  • 关键字参数名kargs拼写错误,正确应为kwargs
  • 传参格式错误,无冒号的大括号键值对是集合语法,无法传递字典参数,正确格式为{'slug': self.slug}
    修正后的方法代码:
def get_absolute_url(self):
    return reverse('story-detail', kwargs={'slug': self.slug})

注:因后续模板层的变量引用错误,实际代码根本未执行到reverse调用,因此没有抛出对应的Python语法错误。

2. 模板层变量引用错误

故事列表模板的循环逻辑中,两处链接的变量引用不符合作用域规则:

  • 标题链接写为{{ title.get_absolute_url }},当前循环的上下文对象为story,全局不存在title变量,模板解析时会静默返回空值,最终href渲染为空,点击无任何反应。正确写法为{{ story.get_absolute_url }}
  • 作者链接写为{{ author.get_absolute_url }},同样不存在独立的author变量,正确引用应为循环对象下的关联作者{{ story.author.get_absolute_url }}

3. 视图层类属性配置错误

基于类的视图(ListView/DetailView)绑定模型的属性名为model,当前代码误写为models = Story:

  • ListView因为额外配置了queryset能暂时正常渲染列表
  • DetailView未配置queryset,因属性名错误无法绑定Story模型,就算链接生成正确,访问详情页也会抛出配置类错误
    修正方式:将两个视图类中的models = Story改为model = Story

4. Slug字段缺少自动生成逻辑

当前slug字段配置为unique=True, blank=True但无赋值逻辑,新建故事时slug值会为空,就算前述问题全部修正,也会因为slug值为空无法匹配URL路由规则。可在模型中重写save方法实现slug自动生成:

from django.utils.text import slugify
class Story(models.Model):
    # 原有字段保持不变
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 14:36:11