Django视图可以先返回其标题吗?

我有一个特别沉重的观点,可能需要多次将表单发布返回给自己,但我需要立即使用标题。 有没有办法首先返回模板的标题部分?例如我的观点返回如下:
return HttpResponse(Template('
  {% extends "base.html" %}
  {% block content %} FOO {% endblock %}
'))
理想情况下,我希望能够做到这样的事情:
partialResponse = request.renderUntilBlock('content')
# lots of work
return partialResponse.extend(Template('
  {% block content %} FOO {% endblock %}
'))
更新:显然PHP的结构不同,但这是我希望模仿的:
<?php
echo '<html><head><title>Hi!</title</head><body>';
ob_flush(); flush();
# header has now been output to the client
# do lots of work
echo '<h1>done</h1></body></html>';
?>
    
已邀请:
没有完全测试这个,但这应该根据文档工作。
from django.template import Context, Template

def responder():
    yield '' # to make sure the header is sent

    # do all your work

    t = Template('''
        {% extends "base.html" %}
        {% block content %} FOO {% endblock %}
    ''')
    yield t.render(Context({}))

return HttpResponse(responder())
    
对的,这是可能的。您需要做的是将每个渲染捕获为字符串,然后连接字符串以形成响应的完整内容。 这是低级方式:
from django.template import Context, Template
t1 = Template("My name is {{ my_name }}.")
c1 = Context({"my_name": "Adrian"})
s = t.render(c1)
t2 = Template("My name is {{ my_name }}.")
c2 = Context({"my_name": "Adrian"})  # You could also use the same context with each template if you wanted.
s += t.render(c2)

return HttpResponse(s)
但是,如果你出于性能原因想要这样做,我会确保比较一次渲染所有时间与渲染片段所需的时间。我认为一次渲染是最好的方法。在完成所有事情之前,您无法返回响应。     
据我所知,没有办法直接这样做。最好的办法是简单地返回一个只包含标题的页面和一个通过AJAX获取页面其余部分数据的javascript函数。     

要回复问题请先登录注册