Както беше казано по-рано, може да не се нуждаете от целина. Ето пример, извлечен от случай 2 на това:https://zapier.com/blog/async-celery-example-why-and-how/. При мен работи напълно:
from time import sleep
import json
from django.http import HttpResponse
from django.shortcuts import render
def main_view(request):
return render(request, 'index.html')
def ajax_view(request):
sleep(10) #This is whatever work you need
pi1 = "This is pi1" #I just made pi1/pis1 random values
pis1 = "This is pis1"
context = {
"pi1" : pi1,
"pis1" : pis1,
}
data = json.dumps(context)
return HttpResponse(data, content_type='application/json')
Моят index.html съдържа:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Main View</title>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(document).ready(function(){
$.ajax({
url: "/test_ajax/",
}).done(function( data) {
$("#pi1").text(data.pi1);
$("#pis1").text(data.pis1);
});
});
</script>
</head>
<body>
<h1 id = "pi1">Loading</h1>
<h1 id = "pis1">Loading</h1>
</body>
</html>
И моят urls.py съдържа:
from django.conf.urls import include, url
from django.contrib import admin
from testDjango.test import main_view, ajax_view
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^test/', main_view),
url(r'^test_ajax/', ajax_view)
]
Това, което се случва, когато посетя localhost:8000/test/ е, че незабавно вижте:
След около 10 секунди виждам:
Идеята е да връщате страницата си незабавно и да използвате jquery, за да извлечете резултата от операцията, когато тя приключи, и съответно да актуализирате страницата си. Можете да добавите още неща като ленти за напредък/зареждане на изображение и т.н. За вашия пример можете да направите обработката за pi1
и pis
във фонов режим и го заредете в HTML, след като приключите.