在 Django 中页面重定向时显示加载

Display loading as the page is redirecting in Django

本文关键字:显示 加载 重定向 Django      更新时间:2023-09-26

我不是想要求搭便车,但我似乎根本不知道如何做到这一点。

我最近的帖子是关于在后台运行作业的,但我没有运气这样做。所以。。。

  1. 用户单击窗体内的run,它将触发作业。
  2. 完成作业大约需要 30 秒,返回并告诉 Django 视图函数return HttpResponseRedirect(....)

因此,当页面被重定向时(需要 30 秒来发出"继续前进"的信号)....我想向用户展示像 Ajax 加载 gif 图片一样。

我没有实现Ajax,而且系统太复杂了,无法破解。

我们真的可以用javascript做到这一点吗?问题是它还没有加载任何页面,因为它需要heavy_work才能完成。

result = heavy_work(....)
 .... more code ....
return HttpResponseRedirect(go to this page...)

谢谢!

为什么不使用常规的 ajax 调用?

JavaScript

function do_heavy_lifting(argument) {
    $.ajax({
        type: 'GET',
        data: { argument: argument }, // if necesarry
        url: '/heavy_lifting_django_view_url/',
        beforeSend: function() {
            $('#loading').show();
        },
        success: function(data) {
            ...redirect...
        },
        cache: false
    });
}

.html

<div id="loading" style="display:none">
<button onclick="do_heavy_lifting('argument');">

使用 AJAX 很简单:只需在实际的 ajax 调用之前显示一个"加载器"动画 gif,并在"on_success"响应回调中隐藏加载器 gif。

没有AJAX的Bu - 到目前为止唯一的解决方案是使用迭代器 - 看看这个:如何使用Django流式传输HttpResponse。