Django渲染而不返回?
我的视图函数中有for循环。我需要为每次迭代计算一些东西并呈现内容。但render需要返回,这就是为什么它只进行一次迭代,然后我的view函数就结束了。有没有办法绕过这个?谢谢你的回复。这就是我所想象的Django渲染而不返回?,django,return,render,Django,Return,Render,我的视图函数中有for循环。我需要为每次迭代计算一些东西并呈现内容。但render需要返回,这就是为什么它只进行一次迭代,然后我的view函数就结束了。有没有办法绕过这个?谢谢你的回复。这就是我所想象的 for i in iterations: ... context = i.name render(request, template, {context: context}) return render(request, template, {context: conte
for i in iterations:
...
context = i.name
render(request, template, {context: context})
return render(request, template, {context: context})
在您的循环中,您正在覆盖HTTP响应和上下文,因此无论如何都无法工作。循环应该创建一些数组或列表
names = []
for i in iterations:
...
names.append(i.name)
return render(request, template, {'names': names})
在模板中:
{% for name in names%} {{ name }} {% endfor %}
如果您确实想先渲染它(例如,如果您想添加一些html代码段),可以使用render\u to\u string
rendered_str = []
for i in iterations:
...
rendered_str.append(render_to_string('my_snippet.html', {'name': i.name}))
不需要返回
render
,render
只接受模板并生成HTTP响应。但是你可以自由地对结果做任何你想做的事情。render(…)
毕竟只是一个函数。返回它是一种常见的模式,但您可以将结果存储在一个变量中,以对其进行后期处理。但奇怪的是,您不能创建一个能够呈现所有迭代的模板。嗯,谢谢,我没有意识到它创建了HttpResponse,而且它确实很好地知道。现在我看到了用js绕过它的可能性,如果我存储所有这些迭代,然后在每次请求到来时提供一个迭代。那么return-HttpResponse和return-render是服务内容的唯一方式吗?如果不渲染,就无法执行此操作?@MiroslavSnopke:您需要返回一个HttpResponse
,该响应的构造方式与此无关。因此,不,您可以创建数百个函数,每个函数都以某种方式返回这样的对象。Render只调用该构造函数。您还可以提出Http404
(或其他)异常,Django会将其翻译成HttpResponse
。我还没有尝试过,但我认为我可以将其标记为解决方案,因为它回答了我的问题。