使用Django和Celery

时间:2017-05-14 22:52:37

标签: python django django-views celery

我正在创建一个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')

1 个答案:

答案 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);
}