Django中reverse_lazy跳转异常:添加后缀无法正确跳转至详情页
问题解决方法
你的问题出在AddCommentView的success_url配置错误,导致无法正确生成详情页的跳转地址。
错误原因
原代码中success_url = reverse_lazy("app:list_detail", kwargs={'slug': List.slug})里的List.slug是模型的字段类,不是当前请求中具体的slug值,Django无法据此生成正确的URL,因此默认重定向到当前评论提交页面的URL(即/comment/结尾的路径)。
修复方案
移除类属性success_url,重写get_success_url方法,在方法中获取当前请求的slug参数,反向生成详情页URL:
class AddCommentView(CreateView): model = Comment form_class = CommentForm template_name = 'app/add_comment.html' def form_valid(self, form): list_obj = List.objects.get(slug=self.kwargs['slug']) form.instance.list = list_obj return super().form_valid(form) # 重写get_success_url方法,动态生成跳转地址 def get_success_url(self): return reverse_lazy("app:list_detail", kwargs={'slug': self.kwargs['slug']})
这样提交评论后,就会正确跳转到对应的列表详情页。
内容的提问来源于stack exchange,提问作者Ayat Rahman
相关产品推荐
相关产品推荐

