【问题标题】:Django Templates - Rendering to an IteratorDjango 模板 - 渲染到迭代器
【发布时间】:2012-01-22 03:29:10
【问题描述】:

我有一个 django 视图,它使用模板来显示一个长查询集(> 800 个项目)。渲染视图需要几秒钟的时间,当它完成整个页面的渲染时,它会将其发送到浏览器。相反,我希望模板呈现为迭代器,以便它可以在生成页面时逐行传输页面(因此我可以看到页面出现在我的浏览器中)。我不想在看到任何东西之前等待几秒钟。

现在我的视图返回render_to_response('view_name.html', {items:myitems})

是否像我在 Django 中描述的那样将模板渲染到迭代器?

【问题讨论】:

  • 除了 jdi 提出的解决方案...您是否查看过您的查询集生成的查询?也许你也可以在那里做一些优化?您的查询是否多次访问数据库(例如,用于显示关系)?

标签: django django-templates


【解决方案1】:

不是通过模板,不是。

您可以将 HttpResponse 视为迭代器,逐行生成输出,但模板呈现是一个一体化过程(因为需要解析块等)。

【讨论】:

    【解决方案2】:

    您的选择是使用分页: https://docs.djangoproject.com/en/dev/topics/pagination/

    或者使用ajax。您将加载您的页面,然后通过 ajax 请求请求数据。查看 jquery。

    编辑
    添加更多链接 这是一个使用 jquery 和带有迭代器的 HttpResponse 的示例:http://forum.jquery.com/topic/ajax-partial-response

    以下是某人从文件系统上的文件返回分块响应的示例: http://djangosnippets.org/snippets/365/

    【讨论】:

    • +1 用于建议 ajax ... 但 Django 是否支持渲染到迭代器?
    • 没有。我认为您必须手动执行某些操作,在其中创建一个代表整个页面的迭代器。也就是说,这些项目都在您的迭代器中以块的形式呈现。然后你会将它传递给 HttpResponse
    猜你喜欢
    • 2017-06-03
    • 2022-07-22
    • 1970-01-01
    • 2018-05-20
    • 2018-11-05
    • 2015-10-29
    • 2013-10-10
    • 2012-03-18
    • 2017-05-25
    相关资源
    最近更新 更多