【问题标题】:DJANGO Load/include templates inside base template using ajaxDJANGO 使用 ajax 在基本模板中加载/包含模板
【发布时间】:2015-03-06 07:59:18
【问题描述】:

我正在尝试使用 ajax 在 django 中加载模板。

我不想在所有其他模板中扩展基本模板,因为它需要大量的处理时间。

因此,我找到了一种仅加载一次 base.html 的方法,以后的请求将只在 base 中包含他们的响应模板,即无需再次呈现 base.html(页眉和页脚以及 css 内容)。

有没有办法使用ajax在基本模板中加载其他模板,这样整个页面就不会一直呈现。

【问题讨论】:

    标签: javascript ajax django templates


    【解决方案1】:

    是的,有一些方法:您必须避免在模板中使用{% extends "base.html" %},并使用render_to_string 渲染它们;从 Django 视图返回呈现的 HTML 后,您可以使用 javascript 将其插入到 DOM 中您喜欢的位置。

    这种动作的一个小sn-p示例是

    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 将返回一个带有 form 键的 JSON 对象,其中包含准备在您喜欢的位置显示的 HTML 表单。

    请参阅the docs,了解如何处理 AJAX 调用的 CSFR 令牌。

    【讨论】:

    • 谁说,我们需要避免{% extends "base.html" %}
    • 嗯,他做到了 :) 如果他只想渲染页面的某些部分,我认为最好避免包含 head 部分等等。
    • 我猜他无论如何都得使用缓存,所以为什么这么担心小的 html 部分?
    • 除了性能,我也认为这不是什么大问题,它会让网站看起来更现代,并为更清洁的交互铺平道路。我最近经常使用这种模式,你不相信这是一个可行的解决方案?
    猜你喜欢
    • 2016-02-10
    • 2012-02-09
    • 2016-03-11
    • 1970-01-01
    • 2018-11-25
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多