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
相关产品推荐
相关产品推荐

