1

我是 Django 新手,正在尝试使用django-jquery-file-upload

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

我正在尝试复制这些基于类的视图之一以包含一个共享链接,该链接将引用回画廊中的各个链接。

我要适应的课程是:

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_confirm_delete.html

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

我已经查看了此处的文档,但似乎无法使其适应我的需求。

提前致谢。

4

2 回答 2

5

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

DeleteView向 GET 请求显示的页面使用template_name_suffix.'_confirm_delete'

template_name要改变这一点,只需通过提供参数来推翻此行为:

template_name

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

这适用于任何从 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 类的任何一行,因此它尽可能地干燥。

于 2013-05-31T11:42:27.620 回答
2

因为DeleteView也继承自SingleObjectTemplateResponseMixin它需要一个模板,因此需要一个模板名称。

但是由于您并没有真正使用 Django 提供的功能,DeleteView而是使用 HTTP 方法创建您自己的功能,DELETE您只需将视图的父类从 更改DeleteViewView.

否则检查DeleteView您需要哪个祖先的功能,是浏览基于类的视图的一个很好的起点(官方的 Django 文档还没有真正实现)。

于 2013-05-31T11:51:14.910 回答