小编典典

Django:创建“更改按钮”或等待页面

python

我有一个名为 c.py 的外部python程序,该程序“最多”可以计算20秒。我从Django应用程序 views.py中
调用它,并且在html页面中有一个按钮来启动它。没关系(=在Eclipse中,当我按下网页上的按钮时,我可以看到c.py打印0、1、2、3,…
20),但是我希望按钮从“ GO”变为“ WAIT” ”(在 c.py 过程中)(或者我想在计数或弹出窗口时等待页面)。

py

import time

def prova(z):
    z = 0
    while z < 20:
        time.sleep(1)
        z = z + 1
        print(z)

views.py

    from django.shortcuts import render_to_response
    #etc.

    import c


def home_user(request):
    return render_to_response('homepage/home.html',{'user.username':request}, context_instance = RequestContext(request))

def conta(request):
    c.prova(0)
    return redirect(home_user)

如果功能 conta 正在运行,我在homepage.html中的“等待”按钮中有一个要更改的“开始”按钮。

urls.py

        urlpatterns =patterns('',
    url(r'^homepage/home/$', views.home_user, name='home'),
    #etc.
    url(r'^conta', views.conta, name='conta'),


)

home.html

{% if c.alive %}
<a href="" class="btn btn-danger" role="button">WAIT</a>
{% else %}
<a href="/conta/" class="btn btn-primary" role="button">GO</a>
{% endif %}

我没有把整个代码..我希望这足以理解我的麻烦。我还在“如何在Django中创建等待页面”中看到了,但我将从更简单的内容开始。

到现在 为止, 当我启动 c.py时, 我看到我的网页正在加载某些内容(=正在“计数”),但是我的按钮没有更改,并且
c.py执行之后,我返回到 127.0.0.1:8000/homepage / home / 页面。是html还是我的函数定义中的问题?

更新

我尝试简化这个问题:我找到了这个脚本…

    <button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
    var text = "";
    var i = 0;
    while (i < 10) {
        text += "<br>The number is " + i;
        i++;
    }
    document.getElementById("demo").innerHTML = text;
}
</script>

我想在一段时间内“导入”我的conta () 函数,而不是使用i ++的cicle。

即我想有类似的事情:当 conta() 运行时,出现类似

等候..

当它停止时,我返回主页。.我不知道如何在脚本中“放置” conta() 。这可能吗?我是梦想家吗?:)


阅读 210

收藏
2020-12-20

共1个答案

小编典典

您正在尝试检查客户端上的服务器端值,但问题是该if c.alive语句仅在呈现视图时才被评估-而不是c更改状态。

您将需要能够c通过ajax长轮询或WebSockets向客户端报告状态,或者,如果您不关心的增量状态,c而只想更改链接的文本,则需要在链接的click事件触发时使用JavaScript设置值:

// assuming jQuery for brevity...

$(document).ready(function() {

    // avoid hard-coding urls...
    var yourApp = {
        contaUrl: "{% url 'conta' %}"
    };

    $('#btnGo').click(function(e) {
        e.preventDefault();  // prevent the link from navigating

        // set css classes and text of button
        $(this)
            .removeClass('btn-primary')
            .addClass('btn-danger')
            .text('WAIT');

        $.get(yourApp.contaUrl, function(json) {
             window.top = json.redirect;
        });
    });
});

但是…您的conta函数将需要返回aJsonResponse而不是aHttpResponse以便在客户端进行重定向:

from django.core.urlresolvers import reverse
from django.http import JsonResponse

def conta(request):
    c.prova(0)
    redirect = reverse('name_of_home_user_view')
    return JsonResponse({'redirect': redirect})
2020-12-20