所以我想知道实现以下目标的最佳实践:
def execute_expensive_operation(obj):
#create instance of a model storing the relevant info to load the JSON into the template
#includea `task` field that stores the name of the asynchronous task (obj.pk) so that the JSON can be loaded if the name of the task is known
def test_view(request):
list_of_objects = [...] #will actually be dynamically loaded from the request
task_dict = {}
for obj in list_of_objects:
task_dict[obj.pk] = execute_expensive_operation(obj).delay(obj.pk) #this could take a while, put it on queue (using celery)
context = {"tasks":task_dict}
return render_to_response("template.html",context)
"template.html"
将加载与表中一行中的每个obj
相关的JSON
如上所述,task_dict
实际上将填充AsyncResult
对象,而不是JSON。我想做的是,一旦与任何行相关的异步任务完成,就动态加载该行。
注意:
我为不具体的方法道歉,这不是为了任何具体的事情,而是为了我必须在各种不同的地方处理的一般情况。如果有任何遗漏的信息,请让我知道,以便我可以将其包括在内。
以下是开始的要点。
视图.py
def test_view(request):
# Normal web request processing.
# Return `json` dictionary
template.html
//making periodic ajax request.
(function worker() {
$.ajax({
url: 'paht/to/url',
success: function(data) {
$('.result').html(data);
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 5000);
}
});
})();
还可以查看一个简单的ajax教程,使定期的ajax请求