Django调用get_absolute_url无效 无法从post_list跳转post_detail
问题根因及修复方案
1. 模板变量调用错误(首要原因)
你在post_list.html的循环中遍历的变量是post,但调用get_absolute_url时错误使用了post_detail变量:
<!-- 错误写法,post_detail在post_list页面的上下文中不存在,返回空值,导致href指向当前页 --> <a href="{{ post_detail.get_absolute_url }}" class="stretched-link">Continue reading</a>
修复为:
<a href="{{ post.get_absolute_url }}" class="stretched-link">Continue reading</a>
2. URL反向解析配置错误
你的urls.py中配置了app_name="allpost",调用反向解析时需要携带命名空间,否则reverse无法匹配到对应路由,同时你写的get_absolute_url方法还缺了右括号:
# 错误写法 def get_absolute_url(self): return reverse("post_detail", kwargs={'slug': self.slug}
修复为:
def get_absolute_url(self): return reverse("allpost:post_detail", kwargs={'slug': self.slug})
3. 路由匹配优化(可选,避免匹配冲突)
你的详情页路由缺少末尾斜杠,建议调整为标准格式,避免和其他路由冲突:
path('post/<slug:slug>/',views.PostDetail.as_view(),name='post_detail'),
4. DetailView冗余代码清理(不影响跳转,属于逻辑错误)
你在PostDetail的get_context_data方法中错误将整个context字典赋值给了slug变量,属于无用冗余代码,如果不需要额外传参可以直接删除该方法:
# 优化后的PostDetail类 class PostDetail(DetailView): model=Post context_object_name='post_detail'
内容的提问来源于stack exchange,提问作者El Houssain Sabri
相关产品推荐
相关产品推荐

