我是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'保持一致,我如何在另一个模板上重用这个类?
我查看了文档here,但似乎无法根据我的需求进行调整。
提前致谢。
答案 0 :(得分:5)
简而言之,这就是目前正在发生的事情:Django中的DeleteView将基于类名呈现默认模板,如文档中所述:
向GET请求显示的
DeleteView
页面使用template_name_suffix
'_confirm_delete'
。
要更改此功能,请通过提供template_name
argument:
template_name
由字符串定义使用的模板的全名。
这适用于从TemplateResponseMixin继承的任何内置的基于类的视图。
将其应用于网址格式中的类定义或(根据您的喜好):
在课堂上:
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类的单行,因此它就像DRY一样。
答案 1 :(得分:1)
由于DeleteView
也继承自SingleObjectTemplateResponseMixin
,因此需要模板,因此需要模板名称。
但是,由于您并未使用Django DeleteView
提供的功能,而是使用HTTP方法DELETE
创建自己的功能,因此您只需更改视图的父类DeleteView
即可。到View
。
否则,检查哪些功能来自DeleteView
所需的this,{{3}}是浏览基于类的视图的良好起点(官方Django文档还没有。)< / p>