You need to enable JavaScript to run this app. Django中SlugField字段名非默认slug时功能失效问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Django中SlugField字段名非默认slug时功能失效问题咨询

问题1:模型中get_absolute_url参数与路由参数不匹配

你在urls.py中定义详情路由的slug参数名为bk_slug,但get_absolute_url方法传递的参数键是slug,参数名不一致导致URL生成失败。
修改models.py中get_absolute_url方法:

def get_absolute_url(self):
    return reverse('book_detail', kwargs={'bk_slug': self.bk_slug})

问题2:DetailView未指定自定义slug字段配置

Django的DetailView默认会去URL参数中取名为slug的参数,同时默认查询模型中名为slug的字段,你自定义了字段名和参数名后需要手动指定这两个配置。
修改views.py中的BookDetailView类:

class BookDetailView(DetailView):
    model = Book
    slug_url_kwarg = 'bk_slug' # 对应URL中定义的参数名
    slug_field = 'bk_slug' # 对应模型中存储slug的字段名

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

问题3:模板中调用方法的路径错误

循环变量本身就是book对象,不需要加dimlibrary.前缀,直接调用对象的方法即可。
修改模板中链接的部分:

<li><a href="{{ book.get_absolute_url }}">{{ book.bk_title }}</a> - {{ book.bk_author }} - {{ book.bk_editor }}</li>

修改完以上三处即可正常生成URL、访问详情页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:24:02