Django 在基于类的视图中指定模板名称
我是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
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中所示。对不起,我误解了你的意思,这非常有效,非常感谢。