【问题标题】:Add StreamingHttpResponse into middle of Django template将 StreamingHttpResponse 添加到 Django 模板的中间
【发布时间】:2018-09-12 07:36:00
【问题描述】:

Python 3.6.3、Django 2.0.3

我是 django 新手,但我正在尝试制作一个非常简单的网站,有人可以在其中触发一些以前只是杂项、独立 python 脚本的任务。不幸的是,这些任务可能需要很长时间。我希望能够在以下模板({{ stream }} 所在的位置)中间显示这些任务的输出,以便用户获得一些有意义的反馈。

{% load pagePieces %}

{% page_header %}

<div class="container">

    <div class="row">
        <a class="btn" href="/"><i class="fa fa-chevron-left"></i> Home</a>
    </div>

    <div class="row row-header"><h1>{{ operation }}</h1></div>

    <div class="row row-content">
        {{ stream }}
    </div>
</div>

{% page_footer %}

在我的视图文件中,我尝试了一些不同的东西,但这里是关于我现在所处的位置(这有点简化。我取出了一些错误处理并更改了一些名称):

def myaction(request):
    output_template = loader.get_template('myapp/process_output.html')
    return StreamingHttpResponse(
        output_template.render({
            'operation': 'That long running task', 
            "stream": streaming_wrapper()
        })
    )

def streaming_wrapper():
    output_template = loader.get_template('myapp/process_output.html')
    x = yield from a_module.long_running_task()
    yield output_template.render({
        'operation': 'That long running task', 
        "stream": x
    })

这会从 long_running_task() 流式传输输出,但在完成之前不会加载模板的其余部分。在其他时候,我已经让输出在模板之后进行流式传输,但从不在中间,这看起来很糟糕,因为我的模板有页眉和页脚。

我不确定如何完成这项工作,也不确定答案是否在我的观点中,或者可能使用我的模板做一些更复杂的事情。

(我也知道这与这 2 个问题类似,但它们都没有令人满意的答案,而且已经有多年历史了。

Django: return a StreamingHttpResponse on an existing html page

Django StreamingHttpResponse into a Template)

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    尝试按照 Miguel Grinberg 的这篇博客 - https://blog.miguelgrinberg.com/post/video-streaming-with-flask/page/8 (这是针对 Flask)实施这些步骤。但是您必须遵循相同的步骤,并且还需要根据需要修改模板。这些步骤对我有用。

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2018-01-16
      • 2020-07-22
      • 2018-09-12
      • 2022-07-10
      • 2018-08-29
      • 2021-03-05
      • 1970-01-01
      • 2019-08-03
      相关资源
      最近更新 更多