如何在Django中逐行显示数据

时间:2018-10-18 02:21:10

标签: django

我正在django中构建一个应用程序。在我的网站中,我想使用“ ping”命令并​​显示结果以逐行查看到textarea中。例如:如果我ping google,那么我会收到

Pinging google.com [216.58.221.238] with 32 bytes of data:

Reply from 216.58.221.238: bytes=32 time=32ms TTL=52

Reply from 216.58.221.238: bytes=32 time=32ms TTL=52

Reply from 216.58.221.238: bytes=32 time=33ms TTL=52

Reply from 216.58.221.238: bytes=32 time=33ms TTL=52

逐行

如何在html页面中逐行显示结果?

2 个答案:

答案 0 :(得分:0)

简短的答案是,您将需要使用AJAX。您将需要:

1)返回HTML页面的常规Django视图:

def main_page_view(request):
    return render('main_page.html')

2)另一个Django视图,该视图从某处获取ping状态并将其作为文本(最好是JSON)返回(您可以使用JsonResponse):

def ping_status_view(request):
    ping_status_string = get_ping_status()  # Of course you'll have to make this function
    return JsonResponse({'status': ping_status_string})

3)HTML页面上的一些Javascript代码,这些代码使用AJAX连接到为JSON视图指定的URL,获取JSON并将其添加到页面。您将要使用jQuery或其他框架,不要尝试用普通的javascript做AJAX,这太可怕了。 jQuery有一个getJson方法可能会有所帮助:

$.getJson('url.to.django/ping/status/view', function(data){
    var status = data.status
    $("#status-area").append('<p>' + status + '</p>')
});  

答案 1 :(得分:0)

首先,您需要使用子进程获取ping的输出。

views.py

def ping(request, url):

from subprocess import check_output
out = check_output(["ping", "-c 4", url])
out = str(out)
final = out.split('\\n')

return render(request, 'my_template.html', {'ping_out': final})

urls.py

from django.conf.urls import url
url(r'^ping/(?P<url>[\w.@+-/]+)/$', views.ping, name='ping')

my_template.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<textarea>
    {% for i in ping_out %}
     {{ i }} 
  {% endfor %}
</textarea>
</body>
</html>

linebreaks print