gpt4 book ai didi

javascript - 在服务器处理 View 时,如何在 Django 中显示加载动画?

转载 作者:行者123 更新时间:2023-12-04 10:50:24 24 4
gpt4 key购买 nike

所以我目前正在处理一个 Django 项目,该项目的 View 需要花费相当多的时间来加载,并且在页面加载之前让用户想知道网站有什么问题可能对用户不友好。

我的网站以这样的方式工作,即用户将拥有一个网址,例如:

http://www.example.com/Name/JohnRichards

保存到他们的书签。在访问上述 URL 时,服务器应显示加载屏幕的加载消息(可能带有 GIF 和 AJAX 或 JS),直到服务器完成加载数据然后显示它。

注:以防万一,当他的用户转到上述链接时,他们不会被重定向到那里,相反,这将是他们的入口点,因为这是他们保存在书签中的网址

我认为可行的是在有人访问页面时立即返回某种加载模板,然后在数据处理完成后,我将返回最终响应。但是我不能在一个函数中有两个返回值。

以下是我的 urls.py 文件:
from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
path('', views.index, name='index'),
path('Name/'+'<str:Name>', views.NameInLink, name='NameInLink'),
]

以下是我的 views.py 文件
from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from .forms import NameForm
from . import DataProcessor
import time

def NameInLink(request, Name):
UserData = DataProcessor.process(Name)
return render(request, "UserData.html", {"UserData": UserData})

如何在用户使用访问 URL 和数据处理完成之间添加各种加载屏幕?

最佳答案

我的建议是将加载模板(GIF 或其他)放在页面的默认模板中。然后,当 Ajax 调用成功返回时,使用 javascript 隐藏或删除加载 GIF。

如果我正确理解您的场景,我认为没有必要使用 Ajax 发送加载模板。

编辑

您不能从一个 View 发送两个连续的响应。在您看来,在处理用户数据之前无法发送响应。

所以我认为你的流程应该是这样的:

  • 打开没有用户数据的加载模板

  • def NameInLink(request, Name):
    return render(request, "UserData.html")
  • 加载后,您的页面应向第二个 View 发送 AJAX 请求(接收 html 数据),例如:

  •     def process_data(request, name):
    userData = DataProcessor.process(name)
    context = {'data': userData}
    result = render_to_string("some_results_template", context)
    data = {'data': result}
    return JsonReponse(data)
  • 成功返回 AJAX 调用后,删除 GIF 并使用 javaScript
  • 添加返回的数据

    这是一个带有脚本的非常精简的可能模板的示例,只是为了使答案更清晰
    <head>
    <!-- Don't forget to load jQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    </head>

    <body>
    <h1>Default Page</h1>

    <!-- The loading image -->
    <div id="loading">
    <p>Loading</p>
    </div>

    <!-- Container for result -->
    <div id="success">

    </div>

    <script>

    // Function for adding User data and removing loading animation
    var replace_data = function(data){
    $('#success').append(data.data);
    $('#loading').remove();
    }

    // AJAX call when page has loaded
    $(document).ready(function(){
    $.ajax({
    url: '/test2/',
    data: {
    'name': 'FOO'
    },
    data_type: 'html',
    success: function(data){
    replace_data(data);
    }
    });
    });

    </script>
    </body>

    关于javascript - 在服务器处理 View 时,如何在 Django 中显示加载动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59510573/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com