Django визуализирует страницу загрузки, затем загружает актуальную страницу - PullRequest
0 голосов
/ 13 марта 2019

Моя настоящая страница, которую я хочу загрузить, занимает довольно много времени, потому что она запрашивает API для большого количества данных (python выполняет запросы к серверу).Как я могу отобразить свою загрузочную страницу, а затем отобразить мою фактическую страницу после сбора данных.

Что я пытаюсь сделать в моем view.py

class Page(ListView):

       def loading(request):
            return render(request,'loading.html')

       def viewProfile(request, player_name):
            Page.loading(request)

            context = {
                'data1' : query_api(1),
                'data2' : query_api(2),
                'data3' : query_api(3),

            } 
            return render(request, 'actualpage.html', context)

1 Ответ

0 голосов
/ 13 марта 2019

На вашей странице загрузки сделайте запрос ajax к представлению, которое будет запрашивать API, и при обратном вызове успеха установите html-данные в вашем шаблоне.

Однако, если API требует многоя бы предложил вам использовать celery для его асинхронной обработки, чтобы ваш пользователь мог нормально перемещаться по сайту, а не ждать.

В вашем шаблоне -

$.ajax({
            url: "<query_view_url>",
            type: "GET",
            dataType: 'json',
            success: function (data){
                $("#div_id").html(data.query_data);
            },
            error: function(e){
                console.log(e);
            }
        });

В вашем шаблонеviews.py -

def view_of_query_url(request, <other parameters>):
    <query_logic>
    data = dict()
    data['query_data'] = <your_queried_data>  # In html format using render_to_string
    return JsonResponse(data)
...