Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django:创建一个;“更改按钮”;或等待页面_Javascript_Python_Django - Fatal编程技术网

Javascript Django:创建一个;“更改按钮”;或等待页面

Javascript Django:创建一个;“更改按钮”;或等待页面,javascript,python,django,Javascript,Python,Django,我有一个名为c.py的外部python程序,它最多“计数”20秒。 我从Django app views.py调用它,在html页面中有一个启动按钮。这没关系(=在Eclipse中,当我按下网页上的按钮时,我可以看到c.py打印0,1,2,3,…20),但我希望在c.py过程中按钮从“GO”更改为“WAIT”(或者我希望在计数过程中执行等待页面或弹出窗口) c.py import time def prova(z): z = 0 while z < 20:

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

c.py

import time

def prova(z):
    z = 0
    while z < 20:
        time.sleep(1)
        z = z + 1
        print(z)
    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)
        urlpatterns =patterns('',
    url(r'^homepage/home/$', views.home_user, name='home'),
    #etc.
    url(r'^conta', views.conta, name='conta'),


)
def conta(request):
    c.prova(0)
    redirect = reverse('home')                  
    return JsonResponse({'redirect': redirect})
在homepage.html中有一个“GO”按钮,如果函数conta正在运行,我想在“WAIT”中更改该按钮

url.py

import time

def prova(z):
    z = 0
    while z < 20:
        time.sleep(1)
        z = z + 1
        print(z)
    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)
        urlpatterns =patterns('',
    url(r'^homepage/home/$', views.home_user, name='home'),
    #etc.
    url(r'^conta', views.conta, name='conta'),


)
def conta(request):
    c.prova(0)
    redirect = reverse('home')                  
    return JsonResponse({'redirect': redirect})
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 %}
{%if c.alive%}
{%else%}
{%endif%}
我没有把所有的密码都写进去。。我希望这足以理解我的烦恼。 我也看到了,但我会从更简单的开始

到目前为止,当我启动c.py时,我看到我的网页正在加载一些东西(=它正在“计数”),但我的按钮没有改变,在执行c.py后,我返回到127.0.0.1:8000/主页/主页。 问题是在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>
试试看

函数myFunction(){ var text=“”; var i=0; 而(i<10){ text+=“
数字为”+i; i++; } document.getElementById(“demo”).innerHTML=text; }
我想在while中“导入”我的conta()函数,而不是使用I++

i、 e.我想要一个类似的东西:
当conta()运行时,出现类似于等待的内容。

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

您正在尝试检查客户端上的服务器端值,但问题是,
if c.alive
语句仅在呈现视图时进行计算,而不是在
c
的状态更改时进行计算

您需要能够通过ajax长轮询或WebSocket向客户端报告
c
的状态,或者,如果您不关心
c
的增量状态,只想更改链接的文本,则需要在触发链接的单击事件时使用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
函数需要返回
JsonResponse
而不是
HttpResponse
,以便在客户端执行重定向:

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})

我发布我的工作解决方案。感谢@Brandon提供了有用的答案

conta.js中一些更改:

$(document).ready(function() {

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


    $('#btnGo').click(function(e) {
        e.preventDefault();  
        // set css classes and text of button
        $(this)
            .removeClass('btn-primary')
            .addClass('btn-danger disabled') // with *disabled* I'm sure that the button is not clickable
            .text('WAIT');



        $.get(yourApp.contaUrl, function(json) {     
             alert("I have finished counting");                    
             parent.window.location.reload(true);               


        });
    });
});
视图中.py

import time

def prova(z):
    z = 0
    while z < 20:
        time.sleep(1)
        z = z + 1
        print(z)
    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)
        urlpatterns =patterns('',
    url(r'^homepage/home/$', views.home_user, name='home'),
    #etc.
    url(r'^conta', views.conta, name='conta'),


)
def conta(request):
    c.prova(0)
    redirect = reverse('home')                  
    return JsonResponse({'redirect': redirect})

目前,这对我来说是非常模糊的。。。我在哪里可以研究这些论点?你有什么建议我的链接吗?没有。这是一个相当基本的概念。您有一个在服务器端执行的进程,您的模板对此一无所知,除非它通过Ajax与服务器端通信。我指的是我还不知道的jquery代码语法。啊,这很简单-jquery.com:)好吧,你需要在你的主页url模式中添加一个名称参数,在主页上包含JavaScript,在链接中添加一个id参数,重构HTML。。。很多事情。我的例子只是让你朝着正确的方向前进。