{"title":"TemplateResponse 和 SimpleTemplateResponse","version":"4.2","locale":"zh-hans","docname":"ref/template-response","url":"/zh-hans/4.2/ref/template-response/","canonical":"https://djangodocs.dev/zh-hans/4.2/ref/template-response/","summary":"标准 HttpResponse 对象是静态结构。它们在构建时提供了一个预渲染的内容块，虽然这些内容可以修改，但它的形式并不便于进行修改。 然而，有时允许装饰者或中间件在视图构建响应后修改响应可能是有益的。例如，你可能想改变所使用的模板，或者在上下文中放入额外的数据。 TemplateResponse…","html":"<span id=\"templateresponse-and-simpletemplateresponse\"></span><h1><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code><a class=\"heading-anchor\" href=\"#module-django.template.response\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>标准 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> 对象是静态结构。它们在构建时提供了一个预渲染的内容块，虽然这些内容可以修改，但它的形式并不便于进行修改。</p>\n<p>然而，有时允许装饰者或中间件在视图构建响应后修改响应可能是有益的。例如，你可能想改变所使用的模板，或者在上下文中放入额外的数据。</p>\n<p>TemplateResponse 提供了一种方法来实现这一点。与基本的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> 对象不同，TemplateResponse 对象保留了模板和上下文的细节，这些细节是由视图提供的，用于计算响应。响应的最终输出直到需要时才会计算，在响应过程的后面。</p>\n<section id=\"simpletemplateresponse-objects\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code> 对象<a class=\"heading-anchor\" href=\"#simpletemplateresponse-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SimpleTemplateResponse</span></span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"attributes\">\n<h3>属性<a class=\"heading-anchor\" href=\"#attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.template_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">template_name</span></span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>要渲染的模板的名称。接受一个依赖于后台的模板对象（如 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> 返回的模板对象）、一个模板的名称或一个模板名称列表。</p>\n<p>例如： <code class=\"docutils literal notranslate\"><span class=\"pre\">['foo.html',</span> <span class=\"pre\">'path/to/bar.html']</span></code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.context_data\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">context_data</span></span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.context_data\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>渲染模板时要使用的上下文数据，必须是 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a>。</p>\n<p>例如： <code class=\"docutils literal notranslate\"><span class=\"pre\">{'foo':</span> <span class=\"pre\">123}</span></code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.rendered_content\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">rendered_content</span></span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.rendered_content\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>响应内容的当前渲染值，使用当前模板和上下文数据。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.is_rendered\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_rendered</span></span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.is_rendered\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>表示响应内容是否已呈现的布尔值。</p>\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h3>方法<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.__init__\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">__init__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">charset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.__init__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>用给定的模板、上下文、内容类型、HTTP 状态和字符集实例化一个 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse\" title=\"django.template.response.SimpleTemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code></a> 对象。</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code></dt><dd><p>依赖于后台的模板对象（如 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> 返回的模板对象），模板的名称，或者模板名称的列表。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code></dt><dd><p>一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a> 的值，用于添加到模板上下文中。默认情况下，这是一个空字典。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code></dt><dd><p>包含在 HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> 头中的值，包括 MIME 类型规格和字符集编码。如果指定了 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code>，则使用其值。否则，使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">'text/html'</span></code>。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">status</span></code></dt><dd><p>响应的 HTTP 状态码。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">charset</span></code></dt><dd><p>响应将被编码的字符集。如果没有给定，将从 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> 中提取，如果不成功，将使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> 设置。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>用于加载模板的模板引擎的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-TEMPLATES-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> 。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code></dt><dd><p>要添加到响应中的 HTTP 标头的字典。</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.resolve_context\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">resolve_context</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.resolve_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>预处理将用于渲染模板的上下文数据。接受一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a> 的上下文数据。默认情况下，返回相同的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a>。</p>\n<p>覆盖此方法，以自定义上下文。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.resolve_template\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">resolve_template</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.resolve_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>解析用于渲染的模板实例。接受一个依赖于后台的模板对象（例如 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> 返回的对象），模板的名称，或者模板名称的列表。</p>\n<p>返回要渲染的依赖于后台的模板对象实例。</p>\n<p>覆盖此方法，以便自定义模板加载。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.add_post_render_callback\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">add_post_render_callback</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.add_post_render_callback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>添加一个回调，将在渲染发生后被调用。该钩子可用于将某些处理操作（如缓存）推迟到渲染发生后。</p>\n<p>如果 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse\" title=\"django.template.response.SimpleTemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code></a> 已经被渲染，回调将被立即调用。</p>\n<p>当调用时，回调将被传递一个单一的参数——渲染的 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse\" title=\"django.template.response.SimpleTemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code></a> 实例。</p>\n<p>如果回调返回一个不是 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> 的值，这个值将被用作响应，而不是原来的响应对象（并将传递给下一个渲染后回调等）。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.SimpleTemplateResponse.render\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">render</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.SimpleTemplateResponse.render\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将 <code class=\"docutils literal notranslate\"><span class=\"pre\">response.content</span></code> 设置为由 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse.rendered_content\" title=\"django.template.response.SimpleTemplateResponse.rendered_content\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse.rendered_content</span></code></a> 得到的结果，运行所有的渲染后回调，并返回结果的响应对象。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">render()</span></code> 只有在第一次被调用时才会产生效果。在以后的调用中，它将返回第一次调用的结果。</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"templateresponse-objects\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 对象<a class=\"heading-anchor\" href=\"#templateresponse-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.TemplateResponse\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TemplateResponse</span></span><a class=\"heading-anchor\" href=\"#django.template.response.TemplateResponse\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 是 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse\" title=\"django.template.response.SimpleTemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code></a> 的一个子类，它知道当前的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>。</p>\n</dd></dl>\n\n<section id=\"id1\">\n<h3>方法<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.response.TemplateResponse.__init__\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TemplateResponse.</span></span><span class=\"sig-name descname\"><span class=\"pre\">__init__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">charset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.response.TemplateResponse.__init__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>用给定的请求、模板、上下文、内容类型、HTTP 状态和字符集实例化一个 <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 对象。</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code></dt><dd><p>一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> 实例。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code></dt><dd><p>依赖于后台的模板对象（如 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> 返回的模板对象），模板的名称，或者模板名称的列表。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code></dt><dd><p>一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a> 的值，用于添加到模板上下文中。默认情况下，这是一个空字典。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code></dt><dd><p>包含在 HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> 头中的值，包括 MIME 类型规格和字符集编码。如果指定了 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code>，则使用其值。否则，使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">'text/html'</span></code>。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">status</span></code></dt><dd><p>响应的 HTTP 状态码。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">charset</span></code></dt><dd><p>响应将被编码的字符集。如果没有给定，将从 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> 中提取，如果不成功，将使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> 设置。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>用于加载模板的模板引擎的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-TEMPLATES-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> 。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code></dt><dd><p>要添加到响应中的 HTTP 标头的字典。</p>\n</dd>\n</dl>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"the-rendering-process\">\n<h2>渲染过程<a class=\"heading-anchor\" href=\"#the-rendering-process\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>在将 <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 实例返回给客户端之前，必须对其进行渲染。渲染过程将模板和上下文的中间表示方式，变成最终的字节流，可以提供给客户端。</p>\n<p>在三种情况下，会出现 <code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 被渲染：</p>\n<ul class=\"simple\">\n<li><p>当使用 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse.render\" title=\"django.template.response.SimpleTemplateResponse.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse.render()</span></code></a> 方法显式渲染 <code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 实例时。</p></li>\n<li><p>当通过指定 <code class=\"docutils literal notranslate\"><span class=\"pre\">response.content</span></code> 明确设置响应的内容时。</p></li>\n<li><p>通过模板响应中间件后，但在通过响应中间件之前。</p></li>\n</ul>\n<p>一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 只能被渲染一次。第一次调用 <a class=\"reference internal\" href=\"#django.template.response.SimpleTemplateResponse.render\" title=\"django.template.response.SimpleTemplateResponse.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse.render()</span></code></a> 时，会设置响应的内容；后续的渲染调用不会改变响应内容。</p>\n<p>然而，当显式地赋值给 <code class=\"docutils literal notranslate\"><span class=\"pre\">response.content</span></code> 时，更改总是会被应用。如果您想要强制重新渲染内容，可以重新评估已渲染的内容，并手动赋值响应的内容：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"go\"># Set up a rendered TemplateResponse</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.response</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateResponse</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span> <span class=\"o\">=</span> <span class=\"n\">TemplateResponse</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;original.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">)</span>\n<span class=\"go\">Original content</span>\n\n<span class=\"go\"># Re-rendering doesn&#39;t change content</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;new.html&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">)</span>\n<span class=\"go\">Original content</span>\n\n<span class=\"go\"># Assigning content does change, no render() call required</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">rendered_content</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">)</span>\n<span class=\"go\">New content</span>\n</code></pre></div>\n<section id=\"post-render-callbacks\">\n<h3>渲染后回调<a class=\"heading-anchor\" href=\"#post-render-callbacks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>有些操作——例如缓存——不能在未渲染的模板上执行。它们必须在一个完全完整的、已渲染的响应上执行。</p>\n<p>如果你使用的是中间件，你可以这样做。中间件提供了多种机会来处理从视图退出时的响应。如果你把行为放在响应中间件中，就会保证在模板渲染发生后执行。</p>\n<p>然而，如果你使用的是一个装饰器，则不存在同样的机会。任何在装饰器中定义的行为都会被立即处理。</p>\n<p>为了弥补这一点（以及任何其他类似的用例）， <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 允许你注册回调，当渲染完成后，这些回调将被调用。使用这个回调，你可以将关键的处理推迟到可以保证渲染内容可用的时候。</p>\n<p>要定义一个渲染后的回调，定义一个接受一个参数 response 的函数，然后用模板响应注册该函数：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.response</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_render_callback</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Do content-sensitive processing</span>\n    <span class=\"n\">do_post_processing</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Create a response</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">TemplateResponse</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mytemplate.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n    <span class=\"c1\"># Register the callback</span>\n    <span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">add_post_render_callback</span><span class=\"p\">(</span><span class=\"n\">my_render_callback</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Return the response</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">my_render_callback()</span></code> 将在 <code class=\"docutils literal notranslate\"><span class=\"pre\">mytemplate.html</span></code> 被渲染后被调用，并将提供完全渲染的 <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 实例作为参数。</p>\n<p>如果模板已经被渲染，回调将被立即调用。</p>\n</section>\n</section>\n<section id=\"using-templateresponse-and-simpletemplateresponse\">\n<h2>使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTemplateResponse</span></code><a class=\"heading-anchor\" href=\"#using-templateresponse-and-simpletemplateresponse\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>一个 <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 对象可以被用于任何可以使用普通 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.http.HttpResponse</span></code></a> 的地方。它也可以作为调用 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">render()</span></code></a> 的替代。</p>\n<p>例如，下面的视图返回一个 <a class=\"reference internal\" href=\"#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a>，其中有一个模板和一个包含查询集的上下文：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.response</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">blog_index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">TemplateResponse</span><span class=\"p\">(</span>\n        <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entry_list.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">:</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()}</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n</section>","rootId":"module-django.template.response","toc":[{"title":"SimpleTemplateResponse 对象","anchor":"simpletemplateresponse-objects","children":[{"title":"属性","anchor":"attributes","children":[]},{"title":"方法","anchor":"methods","children":[]}]},{"title":"TemplateResponse 对象","anchor":"templateresponse-objects","children":[{"title":"方法","anchor":"id1","children":[]}]},{"title":"渲染过程","anchor":"the-rendering-process","children":[{"title":"渲染后回调","anchor":"post-render-callbacks","children":[]}]},{"title":"使用 TemplateResponse 和 SimpleTemplateResponse","anchor":"using-templateresponse-and-simpletemplateresponse","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.2/ref/"}],"prev":{"docname":"ref/templates/api","title":"Django 模板语言：对于 Python 开发者","url":"/zh-hans/4.2/ref/templates/api/"},"next":{"docname":"ref/unicode","title":"Unicode 数据","url":"/zh-hans/4.2/ref/unicode/"},"formats":{"html":"/zh-hans/4.2/ref/template-response/","markdown":"/zh-hans/4.2/ref/template-response.md","json":"/zh-hans/4.2/ref/template-response.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/template-response.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/ref/template-response/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}