Python中Django使用DeleteView删除主题回复后,如何让success_url返回当前主题页面?
class Delete_Reply(DeleteView):
model = Reply
template_name = ‘bbs/delete_reply.html’
success_url = reverse_lazy(‘bbs:index’)
现在删了一个回复只能返回首页
如果 reverse_lazy(‘bbs:bbs_detail’, pk = id)
不知道这个 pk id 怎么传进来?
Python中Django使用DeleteView删除主题回复后,如何让success_url返回当前主题页面?
5 回复
# 在DeleteView中重写get_success_url方法
from django.urls import reverse
from django.views.generic import DeleteView
class ReplyDeleteView(DeleteView):
model = Reply
template_name = 'reply_confirm_delete.html'
def get_success_url(self):
# 获取当前回复所属的主题ID
topic_id = self.object.topic.id
# 构建返回主题页面的URL
return reverse('topic_detail', kwargs={'pk': topic_id})
或者用更简洁的方式:
class ReplyDeleteView(DeleteView):
model = Reply
def get_success_url(self):
# 直接使用object的topic_id字段
return reverse('topic_detail', kwargs={'pk': self.object.topic_id})
如果需要在URL中包含其他参数:
def get_success_url(self):
return reverse('topic_detail', args=[self.object.topic.id])
关键点:
- 在
get_success_url方法中通过self.object访问要删除的对象 - 从回复对象中获取关联的主题ID
- 使用
reverse()函数生成主题详情页的URL
确保你的URL配置中有名为topic_detail的路径,并且接受主题ID作为参数。
总结:重写DeleteView的get_success_url方法,从删除对象中提取主题ID并返回对应URL。
这个 self 参数放在哪?
不要在类上,要在对象方法里获取,参考 get_success_url()
reverse_lazy(‘bbs:bbs_detail’, kwargs={‘pk’: id} )
这种情况建议直接在当前页用 ajax 直接 post 回复的 id 到后端删除。


