我正在创建一个django应用,它会在打开时在每个视图中10秒后自动更改视图。仅有2个视图。
我之前从未使用过Celery,这是一个我将要改变做项目的测试应用。
如下所示,我试图做的是在10秒后调用另一个视图,依此类推。
但唯一正在发生的事情是,当我输入网址时,每个视图在完全10秒后渲染,它们不会交替变换
感谢任何帮助
tasks.py
from celery import shared_task
from django.shortcuts import redirect
from django.urls import reverse
from django.core.urlresolvers import resolve
import time
@shared_task
def open_view(request):
current_url = resolve(request.path_info).url_name
if current_url == 'view1':
time.sleep(10)
return redirect("view2")
if current_url == 'view2':
time.sleep(10)
return redirect("view1")
views.py
from django.shortcuts import render
from myapp.tasks import open_view
def view1(request):
open_view(request)
return render(request, 'view1.html')
def view2(request):
open_view(request)
return render(request, 'view2.html')
答案 0 :(得分:0)
如果没有浏览器的一些合作,你就无法将任何东西从服务器推送到浏览器(或者,如Daniel所说,你需要JavaScript)。
这里有一个JS解决方案,它会将你从view1 url重定向到view2(反面):
var redirect_url = null;
// .endsWith needs to be polyfilled for IE!
if (location.href.endsWith('view1')) {
redirect_url = '/view2#' // Use # at the end to prevent alternation
} else if (location.href.endsWith('view2')) {
redirect_url = '/view1#'
} else if (location.href.endsWith('#')) {
location.hash = '' // remove the #
}
if (redirect_url) {
// redirect after 10 seconds
setTimeout(function() {location.href = redirect_url}, 10000);
}