जैसा कि पहले कहा गया है, आपको अजवाइन की आवश्यकता नहीं हो सकती है। यहां इसके मामले 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)
]
जब मैं लोकलहोस्ट पर जाता हूं तो क्या होता है:8000/परीक्षण/ यह है कि मैं तुरंत देखें:
लगभग 10 सेकंड के बाद, मैं देखता हूँ:
विचार यह है कि आप अपना पृष्ठ तुरंत वापस कर दें और जब भी यह समाप्त हो जाए तो ऑपरेशन के परिणाम प्राप्त करने के लिए jQuery का उपयोग करें और तदनुसार अपना पृष्ठ अपडेट करें। आप प्रोग्रेस बार/लोडिंग इमेज इत्यादि जैसी और चीजें जोड़ सकते हैं। आपके उदाहरण के लिए, आप pi1
के लिए प्रोसेसिंग कर सकते हैं और pis
पृष्ठभूमि में और समाप्त होने के बाद इसे HTML में लोड करें।