jra*_*amm 2 django templates asynchronous
我有一个带有此函数的django视图来获取模板的数据:
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['extra_data'] = a_long_running_function()
return context
Run Code Online (Sandbox Code Playgroud)
该extra_data显示在表中.如上面的函数所示,由于计算,页面需要很长时间才能加载extra_data.
那么如何直接显示页面,然后在extra_data计算时更新表格?
我理解如何使用芹菜来a_long_running_function异步执行,但我不知道如何制作页面(现在已加载,但缺少表格数据),获取数据并自动更新?
如果您打算继续使用芹菜,您需要2次观看:
1. viewA加载主页面(没有extra_data- 可能是HTML中的旋转gif动画,向用户传达仍有数据要加载到页面中).此视图还将启动芹菜任务(但不会等待它完成).它看起来类似于:
def viewA(request):
task = a_long_running_function.delay()
return render_to_response('viewA.html', {'task_id': task.id})
Run Code Online (Sandbox Code Playgroud)
2. viewB用户浏览器加载后将通过AJAX访问viewA(其目的是提供extra_data未加载的内容viewA).它看起来类似于:
def viewB(request, task_id):
extra_data = a_long_running_function.AsyncResult(task_id)
if extra_data.ready():
return render_to_response('viewB.html', {'extra_data': extra_data.get()})
return HttpResponse('')
Run Code Online (Sandbox Code Playgroud)
一旦用户的浏览器完成加载viewA,您将需要一些javascript来每隔X秒/分钟开始运行AJAX请求viewB以尝试检索芹菜任务结果(基于可用的芹菜任务ID).一旦AJAX请求成功检索到任务结果viewB,它就会使用户可以看到它.
任何对使用AJAX异步更新模板感兴趣的人都可以使用django-async-include(GitHub存储库).
该项目可以轻松地将静态块包含更改为异步块.这非常适合包含计算量大的模板块.
免责声明:我是这个项目的开发者.
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |