Django 如何使用DetailView覆盖不存在的对象的视图?

Django 如何使用DetailView覆盖不存在的对象的视图?,django,admin,Django,Admin,我想覆盖对象的管理默认详细信息视图,以便在对象不存在时使用不同的模板,即 <mydomain>/admin/<myapp>/<mymodel>/<someidthatdoesexist>/ 但是我得到了一个TemplateDoesNotExist错误: <myapp>/mymodel_detail.html /mymodel\u detail.html 当对象存在时,我应该设置哪个模板来呈现默认的对象详细视图 编辑 根据给出的示例

我想覆盖对象的管理默认详细信息视图,以便在对象不存在时使用不同的模板,即

<mydomain>/admin/<myapp>/<mymodel>/<someidthatdoesexist>/
但是我得到了一个
TemplateDoesNotExist
错误:

<myapp>/mymodel_detail.html
/mymodel\u detail.html
当对象存在时,我应该设置哪个模板来呈现默认的对象详细视图

编辑


根据给出的示例,无需设置模板…

详细视图不会在其源代码中的任何位置引发
模板无文本列表
。因此,引发异常的唯一可能位置是重定向(
returnredirect(url)

顺便说一下,浏览基于类的视图代码的一个非常有用的地方是

对于在对象不存在的情况下呈现自定义模板,您可以轻松修改
get
函数以使其正常工作:

class MyModelDetailView(DetailView):
    model = MyModel
    template_name = 'object_is_found.html' # <= make sure to have this

    def get(self, request, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            # return custom template
            return render(request, 'no_object.html', status=404)
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)
类MyModelDetailView(DetailView):
model=MyModel

template_name='object_is_found.html'#混乱-如果对象不存在,您希望呈现模板,但在这种情况下代码当前执行重定向?那是打字错误还是故意的?你说得对。当对象存在时,我需要默认页面,当对象不存在时,需要呈现自定义模板的自定义页面。我编辑了我的问题。执行此操作时,我仍然会得到TemplateDoesNotExist。是否确实为渲染提供了正确的模板名称?请确保该模板的目录位于
设置中的
模板目录中。py
即使对象存在,我也会出现此错误,因此我猜这与as\u视图()有关在myurl.py中。调用DetailView是否正确?我不想为默认行为指定任何模板,只想在MyModelDetailView.get()的Http404异常中呈现模板时指定一个。在这种情况下,您只是没有提供在找到对象时应该使用的模板的详细视图。您可以通过在类定义中提供
template\u name
属性来实现这一点,也可以将其作为视图传递到
<myapp>/mymodel_detail.html
class MyModelDetailView(DetailView):
    model = MyModel
    template_name = 'object_is_found.html' # <= make sure to have this

    def get(self, request, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            # return custom template
            return render(request, 'no_object.html', status=404)
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)