我发现 Django 的 request.is_ajax 是一种非常有用的方法,可以通过 JS 添加渐进式增强,并且在我的视图中仍然保持 DRY。
但是,如果 request.is_ajax,我想使用基于类的视图并使用不同的模板进行渲染。
我不清楚如何覆盖我的默认“template_name”并在基于类的视图中使模板加载有条件。
我怎样才能做到这一点?
我发现 Django 的 request.is_ajax 是一种非常有用的方法,可以通过 JS 添加渐进式增强,并且在我的视图中仍然保持 DRY。
但是,如果 request.is_ajax,我想使用基于类的视图并使用不同的模板进行渲染。
我不清楚如何覆盖我的默认“template_name”并在基于类的视图中使模板加载有条件。
我怎样才能做到这一点?
def get_template_names(self):
if self.request.is_ajax():
return ['ajax_template.html']
else:
return ['standard_template.html']
执行此操作的适当方法是覆盖TemplateResponseMixin
.
如果您只需要为 Ajax 请求提供不同的模板,请覆盖get_template_names
. 如果您想完全提供不同的响应,比如说一个application/json
响应,然后覆盖render_to_response
以产生不同HttpResponse
的 Ajax 请求。