Django打印随机值

时间:2013-07-26 12:16:41

标签: django django-views

我希望生成的随机数应该打印在网页上,即每5秒后通过HttpResponse(x)打印一次,我已使用time.sleep功能。

如何在不刷新页面的情况下打印随机生成的值?

这是我的 view.py 文件

def main(request):
    return render(request,'graphs/index.html')

def random_generator(request):
    return HttpResponse(randrange(0, 5))

Urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('',

    url(r'random/','apps.graph.views.main', name = 'graph_home'),
    url(r'random_gen/','apps.graph.views.random_generator', name = 'random'),
)

模板

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
            function refreshRandom() {
                $.ajax({
                    url: 'random/',
                    dataType: 'html',
                    success: function(data) {
                        $('#random').html(data);
                    },
                    complete: function() {
                        window.setTimeout(refreshRandom, 5000);
                    }
                });
            }

            window.setTimeout(refreshRandom, 5000);
        </script>    
    </head>

    <body>
        <div id='random'></div>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

您可以为主页面创建一个视图,并为另一个返回随机数的视图创建视图。然后你用javascript写一个ajax调用来刷新你看到的内容。像这样:

views.py

def main(request):
    return render(request, 'index.html')

def random_generator(request):
    return HttpResponse(randrange(0, 5))

urls.py

url('^main/$', 'myapp.views.main'),
url('^random/$', 'myapp.views.random_generator')

然后在你的模板中:

<script type="text/javascript">
function refreshRandom() {
    $.ajax({
        url: '/random/',
        dataType: 'html',
        success: function(data) {
            $('#random').html(data);
        },
        complete: function() {
            window.setTimeout(refreshRandom, 5000);
        }
    });
}

window.setTimeout(refreshRandom, 5000);
</script>
<div id='random'></div>

虽然我不知道通过django视图做到这一点你会得到什么。如果这就是你想要做的,你可能想尝试用javascript在客户端编写整个东西。

答案 1 :(得分:0)

你可以使用纯JS来实现它,不需要打扰Django:

var random_interval = setInterval(function() {
    var random_number = 1 + Math.floor(Math.random() * 6);
    $('#random-number').text(random_number);
}, 5000); // every 5 second