2013-05-31 108 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

感謝您的鏈接, –