Django使用DeleteView报错TemplateDoesNotExist缺少对应HTML文件如何处理
问题原因
Django 没有内置 project_confirm_delete.html 模板,该文件需要你自行创建。
Django 通用类视图 DeleteView 仅约定了默认模板的命名规则,不会提供内置的渲染模板:默认会查找路径为 <应用名>/<模型类名小写>_confirm_delete.html 的模板,你的场景下应用名为 documents、模型类为 Project,所以触发了模板不存在的报错。
解决方法
你可以根据需求二选一:
1. 按规则创建确认删除模板
在你的Django项目模板目录下新建 documents/project_confirm_delete.html 文件,示例内容如下:
<h2>确认删除项目</h2> <p>你确定要删除项目「{{ object.name }}」吗?删除后数据无法恢复。</p> <form method="post"> {% csrf_token %} <button type="submit">确认删除</button> <a href="{% url 'documents:draftdocumentview' %}">取消</a> </form>
访问视图时会先渲染这个确认页,用户点击提交后才会执行删除操作,跳转至你配置的成功页面。
2. 跳过确认页直接执行删除(不推荐,不符合通用规范)
如果你不需要确认步骤,点击删除按钮后直接执行删除,可以修改视图配置,不需要额外创建模板:
from django.views.generic.edit import DeleteView from django.http import HttpResponseRedirect class ProjectDeleteView(DeleteView): http_method_names = ['post'] # 改为仅接收POST请求 model = Project pk_url_kwarg = "pk" def get_success_url(self): return reverse("documents:draftdocumentview") def get(self, request, *args, **kwargs): # 重写get方法直接执行删除,不需要渲染确认页 return self.post(request, *args, **kwargs)
对应前端删除按钮直接发POST请求到该视图地址即可,不需要跳转GET页面。
内容的提问来源于stack exchange,提问作者Masaki93
相关产品推荐
相关产品推荐

