如何将动态URL传入Django上下文字典?实现通用删除模板
实现通用删除模板,动态传递Cancel按钮URL
问题背景
当前每个X_confirm_delete.html模板都硬编码了Cancel按钮的跳转URL,希望通过在各个DeleteView中传入动态URL,实现单个通用删除模板的复用。
实现步骤
1. 创建通用删除模板
新建通用模板generic_confirm_delete.html,将硬编码URL替换为上下文变量:
<form method="POST" action=""> {% csrf_token %} <h2>Are you sure you would like to delete this {{ object._meta.verbose_name }}?</h2> <button type="submit" value="send" class="btn btn-danger">Yes, Delete</button> <button class="btn btn-info mb-8"> <a class="text-white" href="{{ cancel_url }}">Cancel</a> </button> </form>
其中object._meta.verbose_name会动态显示当前模型的名称,让模板适配更多场景。
2. 修改BlogDeleteView传递动态取消URL
更新views.py中的BlogDeleteView,在get_context_data中生成并传入取消按钮的目标URL:
class BlogDeleteView(SuccessMessageMixin,LoginRequiredMixin,TeacherOwnerPassesTestMixin,DeleteView): model = Post template_name = "postings/generic_confirm_delete.html" # 切换为通用模板 success_url = reverse_lazy('blog-list') success_message = "Your post has been deleted!" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['list_title'] = "Our Blog" context['list_url'] = "blog-list" context['detail_title'] = "Delete Post" # 生成取消按钮的跳转URL:此处指向当前文章的详情页 context['cancel_url'] = reverse('blog-detail', kwargs={'pk': self.object.id}) return context
如果需要跳转到列表页,直接替换为reverse('blog-list')即可,可根据需求灵活调整。
3. 其他删除视图复用示例
比如针对评论的删除视图,同样可以复用该通用模板:
class CommentDeleteView(SuccessMessageMixin,LoginRequiredMixin,DeleteView): model = Comment template_name = "postings/generic_confirm_delete.html" success_url = reverse_lazy('blog-list') success_message = "Comment deleted successfully!" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 取消按钮跳转到评论所属的文章详情页 context['cancel_url'] = reverse('blog-detail', kwargs={'pk': self.object.post.id}) return context
关键说明
- 借助
DeleteView的get_context_data方法动态生成cancel_url,可自由控制Cancel按钮的跳转目标 - 通用模板依赖Django
DeleteView默认传入的object变量和自定义的cancel_url变量,无需为每个模型单独编写模板 - 若所有删除场景的Cancel按钮都指向列表页,也可直接在模板中使用
{% url list_url %},但动态传入cancel_url的方式灵活性更强
内容的提问来源于stack exchange,提问作者Dylan Bergmann
相关产品推荐
相关产品推荐

