2013-05-31 74 views
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

我怎么可以重写一类具有相同的功能,除了它指向不同的模板?或更好的&符合'干'我怎样才能重用这个类在另一个模板?

我看过文档here,但似乎无法使其适应我的需求。

在此先感谢。

回答

4

总之,这里发生了什么目前:在Django一个DeleteView将基于在该文档解释了类名呈现默认的模板:

显示GET请求的​​页面使用template_name_suffix'_confirm_delete'

要改变这种状况,只是通过提供template_name argument否决此行为:

template_name

模板由一个字符串定义为使用的全名。

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

将它应用在类定义在URL模式(无论你喜欢):

  • 在类:

    class MyOwnPictureDeleteView(PictureDeleteView): 
        template_name = "myown_picture_delete_template.html" 
    

    是的,那是你的完整的新的基于视图。

  • 在URL配置:

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

无论哪种方式,你不必重写原有PictureDeleteView类的单行线,所以这是干它会得到。

+0

所以我结束了重复相同的类,并改变名称和添加template_name,因为你desrcibed,但会没有更多'干'的方式来实现相同? –

+0

@ChristopherCamplin我想我只是在示例中展示了您不必重复代码 - 只是使用类继承,如我的答案('类MyOwnPictureDeleteView(PictureDeleteView)')所示。 – gertvdijk

+0

对不起,我误解了你想说的话,那就像一个魅力,非常感谢。 –

1

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

但因为你并没有真正使用Django的​​提供的功能,但在创建你自己使用的HTTP方法DELETE你可以改变父类视图从​​到View

否则,请检查您需要哪个​​的祖先函数,this是浏览基于类的视图的一个很好的起点(官方的Django文档还不是真的)。

+0

感谢您的链接, –