Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django渲染而不返回?_Django_Return_Render - Fatal编程技术网

Django渲染而不返回?

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循环。我需要为每次迭代计算一些东西并呈现内容。但render需要返回,这就是为什么它只进行一次迭代,然后我的view函数就结束了。有没有办法绕过这个?谢谢你的回复。这就是我所想象的

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
。我还没有尝试过,但我认为我可以将其标记为解决方案,因为它回答了我的问题。