【问题标题】:Django - load page fragments using Ajax/AjahDjango - 使用 Ajax/Ajah 加载页面片段
【发布时间】:2010-12-03 00:54:27
【问题描述】:

我有一个复杂的页面,其中页面的某些部分需要更多时间才能加载。我正在考虑使用 AJAH 方法并在加载初始页面后使用 jQuery 加载片段。然后我意识到这应该是一个很普遍的问题。像 {% includeajax "sometemplate.html" %} 这样的东西怎么样?

这意味着使用 AJAH/AJAX 加载“sometemplate.html”。那不是很酷的标签吗?有任何想法吗?

我知道如何实现这一点,如果有这样的可重用标签会很好。你知道其他一些简单的方法来实现这一点吗?

谢谢

【问题讨论】:

    标签: jquery ajax django include


    【解决方案1】:

    我做了一个中间件和一个模板标签来做这个:

    {% delayed_block big_table %}
        Real content. It will be loaded by Javascript at document.ready event.
    {% delayed_stub %}
        Stub content that is rendered immediately.
    {% enddelayed_block %}
    

    当页面被加载时,一段 Javascript 注意到一个特殊的类并向服务器请求它,使用?partial=big_table 参数发出请求。当big_tablepartial 参数中时,此块呈现真实内容。中间件捕获输出,仅提取此块并将其包装在 JSON 中。然后 Javascript 模块将其放入正确的位置。

    该项目名为django-partial-page。其中django部分是个彩蛋,Javascript模块在example/media/js/partial.js

    【讨论】:

    • 太好了,我去看看。这正是我想要的。
    【解决方案2】:

    我会以url 的样式使其指向视图而不是模板。模板标签可以生成一个虚假的HttpRequest,它可以发送到视图,然后将响应的内容包含在模板中。

    【讨论】:

    • 将它指向视图更有意义,我同意。为什么要伪造 HttpRequest?我更喜欢标签会生成 JavaScript 代码,该代码将获取并包含视图(片段)的内容。也许我们的意思是一样的,只是彼此不理解。
    • 生成 JavaScript 是可行的(如果不一定简单),但这意味着您必须 另一个 往返于服务器才能显示它。既然你已经在服务器上,你不妨现在就得到它。
    • 重点是我想异步获取它,因为获取用于渲染片段的数据可能需要更多时间。我不希望用户等待 2-3 秒。我加载页面,然后进行额外的旅行以获取该页面片段。
    • 好的。然后让模板标签向 onload 事件的函数添加一个待处理的请求,您在基中声明它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2011-02-06
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多