我正在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页面中逐行显示结果?
答案 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>