Seperti yang dikatakan sebelumnya, Anda mungkin tidak membutuhkan seledri. Berikut adalah contoh yang diturunkan dari kasus 2 ini:https://zapier.com/blog/async-celery-example-why-and-how/. Ini sepenuhnya bekerja untuk saya:
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 saya berisi:
<!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>
Dan urls.py saya berisi:
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)
]
Apa yang terjadi ketika saya mengunjungi localhost:8000/test/ adalah bahwa saya langsung lihat:
Setelah sekitar 10 detik, saya kemudian melihat:
Idenya adalah Anda mengembalikan halaman Anda secara instan dan menggunakan jquery untuk mengambil hasil operasi setiap kali selesai dan memperbarui halaman Anda sesuai dengan itu. Anda dapat menambahkan lebih banyak hal seperti bilah kemajuan/memuat gambar dll. Sebagai contoh, Anda dapat melakukan pemrosesan untuk pi1
dan pis
di latar belakang dan memuatnya ke dalam HTML setelah selesai.