我有一个名为 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() 。这可能吗?我是梦想家吗?:)
您正在尝试检查客户端上的服务器端值,但问题是该if c.alive语句仅在呈现视图时才被评估-而不是c更改状态。
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以便在客户端进行重定向:
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})