我正在尝试使用ajax在django中加载模板。
我不想在所有其他模板中扩展基本模板,因为它需要很长的处理时间。
因此我找到了一种只加载base.html一次的方法,后面的请求只会在基础中包含他们的响应模板,即不再渲染base.html(标题和页脚和css的东西)。
是否有任何方法可以使用ajax在基本模板中加载其他模板,以便不会始终呈现整个页面。
答案 0 :(得分:1)
是的,有一些方法:您必须避免在模板中使用{% extends "base.html" %}
并使用render_to_string
进行渲染;从Django视图返回渲染的HTML后,您可以使用javascript将它插入DOM中的首选位置。
此类操作的一小段示例
def element_form_ajax(request):
form = PageForm()
html = render_to_string('pages/element_form.html',
{'form': form},
RequestContext(request))
data = {'form': html}
return JsonResponse(data)
现在,来自网页的Ajax调用返回一个JSON对象,其中包含一个form
键,其中包含一个HTML表单,可以在您喜欢的位置显示。
关于如何处理AJAX调用的CSFR令牌,请参阅the docs。