Javascript Django:创建一个;“更改按钮”;或等待页面
我有一个名为c.py的外部python程序,它最多“计数”20秒。 我从Django app views.py调用它,在html页面中有一个启动按钮。这没关系(=在Eclipse中,当我按下网页上的按钮时,我可以看到c.py打印0,1,2,3,…20),但我希望在c.py过程中按钮从“GO”更改为“WAIT”(或者我希望在计数过程中执行等待页面或弹出窗口) c.pyJavascript 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:
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。。。很多事情。我的例子只是让你朝着正确的方向前进。