Django 在基于类的视图中指定模板名称

Django 在基于类的视图中指定模板名称,django,django-views,Django,Django Views,我是Django的新手,正在尝试从 它向我介绍了基于类的视图 我试图复制其中一个基于类的视图,以包含一个共享链接,该链接将引用回库中的各个链接 我想适应的课程是: class PictureDeleteView(DeleteView): model = Picture def delete(self, request, *args, **kwargs): """ This does not actually delete the file, only the database

我是Django的新手,正在尝试从

它向我介绍了基于类的视图

我试图复制其中一个基于类的视图,以包含一个共享链接,该链接将引用回库中的各个链接

我想适应的课程是:

class PictureDeleteView(DeleteView):
model = Picture

def delete(self, request, *args, **kwargs):
    """
    This does not actually delete the file, only the database record. But
    that is easy to implement.
    """
    self.object = self.get_object()
    self.object.delete()
    if request.is_ajax():
        response = JSONResponse(True, {}, response_mimetype(self.request))
        response['Content-Disposition'] = 'inline; filename=files.json'
        return response
    else:
        return HttpResponseRedirect('/upload/new')

class JSONResponse(HttpResponse):
    """JSON response class."""
    def __init__(self,obj='',json_opts={},mimetype="application/json",*args,**kwargs):
        content = simplejson.dumps(obj,**json_opts)
        super(JSONResponse,self).__init__(content,mimetype,*args,**kwargs)
这默认为模板名称picture\u confirm\u delete.html

除了指向不同的模板外,如何重写具有相同功能的类?或者更好&为了与“DRY”保持一致,我如何在另一个模板上重用这个类

我已经看过了文档,但似乎无法使其适应我的需要


提前感谢。

简而言之,以下是当前正在发生的事情:Django中的a将根据文档中解释的类名呈现默认模板:

GET请求显示的DeleteView页面使用模板名称后缀“\u确认\u删除”

要改变这一点,只需通过提供以下内容来否决此行为:

模板名称

由字符串定义的要使用的模板的全名

这适用于从TemplateResponseMixin继承的任何内置基于类的视图

在类定义或URL模式中应用它,以您喜欢的方式为准:

在课堂上:

class MyOwnPictureDeleteView(PictureDeleteView):
    template_name = "myown_picture_delete_template.html"
是的,这是您全新的基于类的视图

在URLconf中:

url(r'^picture_delete/(?P<pk>\d+)/', 'myapp.views.PictureDeleteView', \
{'template_name': 'myown_picture_delete_template.html'}),

无论哪种方式,您都不必重写原始PictureDeleteView类的一行,因此这是最枯燥的。

简而言之,目前正在发生的事情是:Django中的a将根据文档中解释的类名呈现默认模板:

GET请求显示的DeleteView页面使用模板名称后缀“\u确认\u删除”

要改变这一点,只需通过提供以下内容来否决此行为:

模板名称

由字符串定义的要使用的模板的全名

这适用于从TemplateResponseMixin继承的任何内置基于类的视图

在类定义或URL模式中应用它,以您喜欢的方式为准:

在课堂上:

class MyOwnPictureDeleteView(PictureDeleteView):
    template_name = "myown_picture_delete_template.html"
是的,这是您全新的基于类的视图

在URLconf中:

url(r'^picture_delete/(?P<pk>\d+)/', 'myapp.views.PictureDeleteView', \
{'template_name': 'myown_picture_delete_template.html'}),
无论哪种方式,您都不必重写原始PictureDeleteView类的一行,因此这是最枯燥的。

因为从它继承也需要模板,因此需要模板名称

但是,由于您并没有真正使用Django的DeleteView提供的功能,而是通过使用HTTP方法DELETE创建自己的功能,所以您可以将视图的父类从DeleteView更改为view

否则,请检查您需要从DeleteView的取消器中选择哪些功能,这是浏览基于类的视图的一个良好起点。Django官方文档还没有正式发布。

,因为从它继承也需要模板,因此需要模板名

但是,由于您并没有真正使用Django的DeleteView提供的功能,而是通过使用HTTP方法DELETE创建自己的功能,所以您可以将视图的父类从DeleteView更改为view


否则,请检查您需要的DeleteView取消器中的哪些功能是浏览基于类的视图的良好起点Django官方文档还不是很好。

因此,我复制了同一个类,更改了名称,并在您设计时添加了模板名称,但是,难道没有一种更“枯燥”的方法来达到同样的效果吗?@ChristopherComplin我想我刚才在示例中展示了,你不必重复代码-只需使用类继承,正如我的答案类MyOwnPictureDeleteViewPictureDeleteView中所示。对不起,我误解了你的意思,这很有魅力,非常感谢。所以我最终复制了同一个类,更改了名称并添加了模板名称,但是,难道没有一种更“枯燥”的方法来达到同样的效果吗?@ChristopherComplin我想我刚才在示例中展示了,你不必重复代码,只需使用类继承,正如我的回答类MyOwnPictureDeleteViewPictureDeleteView中所示。对不起,我误解了你的意思,这非常有效,非常感谢。