打印输出到网页Django

时间:2014-03-03 17:19:04

标签: django

我目前有一个长时间运行的脚本,可以产生各种输出。我想要做的是在按下我的webapp上的按钮时运行此脚本,并使输出实时显示在网页上的文本区域中。我想知道使用Django实现这一目标的最简单方法。

2 个答案:

答案 0 :(得分:1)

如果你在谈论实时输出,那么你需要使用AJAX。

要设置脚本,您可以在网页中找到一个发送AJAX请求的按钮。

function ajax_call_model(data_JSON_Request, object_id){
    $(function jQuery_AJAX_model(){
        $.ajax({
          type: 'GET',
          url: '/ajax_request/',
          data: something,
          datatype: "json",
          success: function(data) {
            $("#output_id").html(data);
          },//success
          error: function() {alert("failed...");}
        });//.ajax
      });//jQuery_AJAX
    };//ajax_call

在视图中,您将拥有以下内容:

def ajax_request(request):
    something = request.GET.get('something', '')# Receives from AJAX
    output = #Does something with the request
    jsonDump = json.dumps(str(output))

    return HttpResponse(jsonDump, content_type='application/json') 

答案 1 :(得分:1)

您需要的是WebSocket! django不直接支持,但我建议您查看Websockets for Django applications using Redis。我之前使用过它,它很容易设置和使用。

例如,创建一个django模板(例如output.html):

<html>
...
<body>
  <textarea id="output" row=3 cols=25></textarea>

  <script>
    var ws = new WebSocket('{{ ws_url }}');
    ws.onmessage = function(e) {
      $('#output').append(e.data); 
    };
  </script>
</body>
</html>

然后创建一个脚本调用的方法,只要它想要将消息输出到文本区域:

def output_message(session_key, user, message):
    conn = redis.StrictRedis()
    ws_url = '{0}:{1}'.format(session_key, user)
    conn.publish(ws_url, message)

最后,您需要在views.py中指定一个呈现output.html模板的方法:

def output_console(request):
    template_values = {'ws_url':'ws://{SERVER_NAME}:{SERVER_PORT}/ws/{0}?subscribe-session'.format(request.user.id, **request.META)}
    return render(request, 'output.html', template_values)

查看项目git repo上的chat server以获得更深入的代码示例。

希望有所帮助,祝你好运!