Заставьте django отображать не-jinja элемент, ожидая его завершения - PullRequest
0 голосов
/ 28 декабря 2018

Так вот что я пытаюсь сделать.Допустим, у меня действительно длинная функция, для обработки которой требуется некоторое время.В конце концов, вывод должен быть отображен на веб-странице.

Я использую Python 3.6 и Django 2. framework.

views.py

from django.shortcuts import render
import time

def f():
    time.sleep(5)
    return [5,6,7]

def index(request):
    return render(request,'homepage/page.html', {'funcF':f})

Итак, как вы можете видеть, у меня есть функция, которая ждет 5 секунд, прежде чем вернуть массив чисел.

homepage / page.html

<p> Hello there! </p>

{% for r in funcF %}
<p> {{r}} </p>
{% endfor %}

Моя цель состоит в том, чтобы я хотел, чтобы Привет! отображался и ждал 5 секунд, а затем отобразил числа в массиве.

В своем текущем состоянии веб-странице вместо этого требуется 5 секунд для перезагрузки, и на ней отображаются Hello there! и числа в массиве одновременно.

Anyяркие идеи?

1 Ответ

0 голосов
/ 28 декабря 2018

Я буду работать в предположении, что ваш вызов time.sleep (5) просто для того, чтобы показать / смоделировать функцию, для вычисления которой требуется 5 секунд.Таким образом, работая в этом предположении, одним из способов было бы разбить его на две конечные точки, последняя из которых является конечной точкой отдыха, поэтому веб-браузер запрашивает страницу приветствия, вы возвращаете только страницу, но вы также добавляете на страницу небольшой javascriptотправляет ajax-запрос get в конечную точку отдыха с функцией, выполнение которой занимает немного времени, пользователь не должен замечать ничего другого, пока это происходит, и когда функция завершает работу и возвращает массив, вы можете использовать свой javascript для построения

элементов.
...