将StreamingHttpResponse添加到Django模板的中间

5
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()流输出,但在完成之前不会加载模板的其余部分。在其他时候,我已经得到了在模板之后流输出的结果,但从未在中间得到过,这看起来很糟糕,因为我的模板有一个页眉和页脚。
我不确定如何使这个工作,也不确定答案是在我的视图中还是在我的模板中做一些更复杂的事情。
(我也意识到这与这两个问题相似,但它们都没有令人满意的答案,而且已经几年了。 Django:在现有HTML页面上返回StreamingHttpResponse Django StreamingHttpResponse进入模板
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接