要在Django中在等待完成时显示非Jinja元素,可以使用异步处理和JavaScript来实现。以下是一个解决方法的示例代码:
- 在Django视图中,使用异步处理来处理后台任务。这可以通过使用
@asyncio
装饰器和async def
关键字来实现。在异步函数中,可以执行一些长时间运行的任务。
import asyncio
from django.http import JsonResponse
@asyncio.coroutine
async def background_task():
# 执行一些长时间运行的任务
await asyncio.sleep(5)
return "Task completed"
def my_view(request):
loop = asyncio.get_event_loop()
task = loop.create_task(background_task())
loop.run_until_complete(task)
return JsonResponse({'message': task.result()})
- 在Django模板中,使用JavaScript来定期轮询后台任务的状态,并在任务完成时更新页面。可以使用
setInterval
函数来定期执行AJAX请求。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Waiting for Task Completion</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
function checkTaskStatus() {
$.ajax({
url: '/check_task_status/',
type: 'GET',
success: function(response) {
if (response.status === 'completed') {
// 更新页面以显示任务完成的内容
$('#task-status').html(response.message);
clearInterval(intervalId);
}
}
});
}
var intervalId = setInterval(checkTaskStatus, 1000); // 每秒钟轮询一次
</script>
</head>
<body>
<h1>Waiting for Task Completion</h1>
<div id="task-status">Task in progress...</div>
</body>
</html>
- 在Django中定义一个用于检查任务状态的视图,并将其与模板中的JavaScript代码中的URL匹配。
from django.http import JsonResponse
def check_task_status(request):
# 检查任务状态的逻辑
if task_is_completed():
return JsonResponse({'status': 'completed', 'message': 'Task completed'})
else:
return JsonResponse({'status': 'in_progress'})
- 在Django中定义URL路由,将视图与URL路径匹配。
from django.urls import path
from .views import my_view, check_task_status
urlpatterns = [
path('my-view/', my_view, name='my-view'),
path('check_task_status/', check_task_status, name='check-task-status'),
]
以上是一个示例解决方法,可在Django中实现在等待完成时显示非Jinja元素。请根据实际需求进行适当修改。