{"title":"Django 实用程序","version":"6.0","locale":"zh-hans","docname":"ref/utils","url":"/zh-hans/6.0/ref/utils/","canonical":"https://djangodocs.dev/zh-hans/6.0/ref/utils/","summary":"本文档涵盖了 django.utils 中所有稳定的模块。 django.utils 中的大部分模块都是为内部使用而设计的，只有以下部分可以被认为是稳定的，因此根据 内部发布废弃政策 的规定，这些模块可以向后兼容。 django.utils.cache Link to this heading # 这个模块包含了控制 HTTP…","html":"<span id=\"django-utils\"></span><h1>Django 实用程序<a class=\"heading-anchor\" href=\"#module-django.utils\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>本文档涵盖了 <code class=\"docutils literal notranslate\">django.utils</code> 中所有稳定的模块。<code class=\"docutils literal notranslate\">django.utils</code> 中的大部分模块都是为内部使用而设计的，只有以下部分可以被认为是稳定的，因此根据 <a class=\"reference internal\" href=\"/zh-hans/6.0/internals/release-process/#internal-release-deprecation-policy\"><span class=\"std std-ref\">内部发布废弃政策</span></a> 的规定，这些模块可以向后兼容。</p>\n<section id=\"module-django.utils.cache\">\n<span id=\"django-utils-cache\"></span><h2><code class=\"docutils literal notranslate\">django.utils.cache</code><a class=\"heading-anchor\" href=\"#module-django.utils.cache\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>这个模块包含了控制 HTTP 缓存的辅助函数。它通过管理响应的 <code class=\"docutils literal notranslate\">Vary</code> 头来实现。它包括直接对响应对象的头进行修补的函数，以及改变函数使其自己进行头修补的装饰器。</p>\n<p>有关 <code class=\"docutils literal notranslate\">Vary</code> 标头的信息，请参阅 <span class=\"target\" id=\"index-16\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-12.5.5\"><strong>RFC 9110 Section 12.5.5</strong></a>。</p>\n<p>本质上，<code class=\"docutils literal notranslate\">Vary</code> HTTP 头定义了缓存在建立缓存密钥时应该考虑哪些头信息。如果请求的路径相同，但 <code class=\"docutils literal notranslate\">Vary</code> 中命名的头内容不同，则需要获得不同的缓存密钥，以防止传递错误的内容。</p>\n<p>例如， <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/\"><span class=\"doc\">国际化</span></a> 中间件需要通过 <code class=\"docutils literal notranslate\">Accept-language</code> 头来区分缓存。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.patch_cache_control\">\n<span class=\"sig-name descname\">patch_cache_control</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.patch_cache_control\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>这个函数通过添加所有关键字参数来修补 <code class=\"docutils literal notranslate\">Cache-Control</code> 头。变化如下：</p>\n<ul class=\"simple\">\n<li><p>所有的关键字参数名都转为小写，下划线转为连字符。</p></li>\n<li><p>如果一个参数的值是 <code class=\"docutils literal notranslate\">True</code> （确切地说是 <code class=\"docutils literal notranslate\">True</code>，而不仅仅是一个真值），那么只有参数名称会被添加到头。</p></li>\n<li><p>所有其他参数在应用 <code class=\"docutils literal notranslate\">str()</code> 后，都会加上其值。</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.get_max_age\">\n<span class=\"sig-name descname\">get_max_age</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.get_max_age\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>以整数形式返回响应 Cache-Control 头的最大寿命（如果没有找到或不是整数，则返回 <code class=\"docutils literal notranslate\">None</code>）。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.patch_response_headers\">\n<span class=\"sig-name descname\">patch_response_headers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em>, <em class=\"sig-param\">cache_timeout<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.patch_response_headers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>为给定的 <code class=\"docutils literal notranslate\">HttpResponse</code> 对象添加一些有用的头信息。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">Expires</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">Cache-Control</code></p></li>\n</ul>\n<p>每个头只有在还没有设置的情况下才会被添加。</p>\n<p><code class=\"docutils literal notranslate\">cache_timeout</code> 的单位是秒。默认使用 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-CACHE_MIDDLEWARE_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\">CACHE_MIDDLEWARE_SECONDS</code></a> 配置。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.add_never_cache_headers\">\n<span class=\"sig-name descname\">add_never_cache_headers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.add_never_cache_headers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在当前日期/时间上添加一个 <code class=\"docutils literal notranslate\">Expires</code> 标头。</p>\n<p>在响应中添加 <code class=\"docutils literal notranslate\">Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private</code> 头，以表明页面永远不会被缓存。</p>\n<p>每个头只有在还没有设置的情况下才会被添加。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.patch_vary_headers\">\n<span class=\"sig-name descname\">patch_vary_headers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em>, <em class=\"sig-param\">newheaders</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.patch_vary_headers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在给定的 <code class=\"docutils literal notranslate\">HttpResponse</code> 对象中添加（或更新） <code class=\"docutils literal notranslate\">Vary</code> 标头。<code class=\"docutils literal notranslate\">newheaders</code> 是一个应该包含在 <code class=\"docutils literal notranslate\">Vary</code> 中的标头名称列表。如果标头包含一个星号，那么根据 <span class=\"target\" id=\"index-17\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-12.5.5\"><strong>RFC 9110 Section 12.5.5</strong></a>，<code class=\"docutils literal notranslate\">Vary</code> 标头将由一个单独的星号 <code class=\"docutils literal notranslate\">'*'</code> 组成。否则，不会删除 <code class=\"docutils literal notranslate\">Vary</code> 中的现有标头。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.get_cache_key\">\n<span class=\"sig-name descname\">get_cache_key</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">key_prefix<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">method<span class=\"o\">=</span><span class=\"default_value\">'GET'</span></em>, <em class=\"sig-param\">cache<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.get_cache_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回一个基于请求路径的缓存密钥。它可以在请求阶段使用，因为它从全局路径注册表中提取要考虑的头列表，并使用这些头建立一个缓存密钥来进行检查。</p>\n<p>如果没有存储头列表，则需要重建页面，因此该函数返回 <code class=\"docutils literal notranslate\">None</code>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.cache.learn_cache_key\">\n<span class=\"sig-name descname\">learn_cache_key</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">response</em>, <em class=\"sig-param\">cache_timeout<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">key_prefix<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">cache<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.learn_cache_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>从响应对象中学习某些请求路径要考虑的头信息。它将这些头存储在全局路径注册表中，这样以后访问该路径时就可以知道要考虑哪些头，而无需建立响应对象本身。头在响应的 <code class=\"docutils literal notranslate\">Vary</code> 头中命名，但我们要防止响应生成。</p>\n<p>用于生成缓存密钥的头列表和页面本身一样存储在缓存中。如果缓存将一些数据从缓存中过期，这意味着我们必须构建一次响应，以获得 Vary 头，因此也就获得了用于缓存密钥的头列表。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.dateparse\">\n<span id=\"django-utils-dateparse\"></span><h2><code class=\"docutils literal notranslate\">django.utils.dateparse</code><a class=\"heading-anchor\" href=\"#module-django.utils.dateparse\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>本模块中定义的函数共享以下属性：</p>\n<ul class=\"simple\">\n<li><p>它们接受 ISO 8601 日期／时间格式的字符串（或一些接近的替代格式），并从 Python 的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#module-datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">datetime</code></a> 模块的相应类中返回对象。</p></li>\n<li><p>如果他们的输入格式很好，但不是有效的日期或时间，他们会引发 <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">ValueError</code></a>。</p></li>\n<li><p>如果输入格式不好，则返回 <code class=\"docutils literal notranslate\">None</code>。</p></li>\n<li><p>它们接受最多皮秒精度的输入，但它们将其截断为微秒，因为这是 Python 支持的。</p></li>\n</ul>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.dateparse.parse_date\">\n<span class=\"sig-name descname\">parse_date</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.dateparse.parse_date\"><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/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.date</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.dateparse.parse_time\">\n<span class=\"sig-name descname\">parse_time</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.dateparse.parse_time\"><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/datetime.html#datetime.time\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.time</code></a>。</p>\n<p>不支持 UTC 偏移；如果 <code class=\"docutils literal notranslate\">value</code> 描述的是 UTC 偏移，结果是 <code class=\"docutils literal notranslate\">None</code>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.dateparse.parse_datetime\">\n<span class=\"sig-name descname\">parse_datetime</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.dateparse.parse_datetime\"><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/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.datetime</code></a>。</p>\n<p>支持 UTC 偏移；如果 <code class=\"docutils literal notranslate\">value</code> 描述的是 UTC 偏移，则结果的 <code class=\"docutils literal notranslate\">tzinfo</code> 属性是一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timezone\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.timezone</code></a> 实例。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.dateparse.parse_duration\">\n<span class=\"sig-name descname\">parse_duration</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.dateparse.parse_duration\"><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/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.timedelta</code></a>。</p>\n<p>要求数据格式为 <code class=\"docutils literal notranslate\">&quot;DD HH:MM:SS.uuuuu&quot;</code>、<code class=\"docutils literal notranslate\">&quot;DD HH:MM:SS,uuuuu&quot;</code> 或 ISO 8601 规定的格式（例如 <code class=\"docutils literal notranslate\">P4DT1H15M20S</code> 相当于 <code class=\"docutils literal notranslate\">4 1:15:20</code>）或 PostgreSQL 的日期时间间隔格式（例如 <code class=\"docutils literal notranslate\">3 days 04:05:06</code>）。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.decorators\">\n<span id=\"django-utils-decorators\"></span><h2><code class=\"docutils literal notranslate\">django.utils.decorators</code><a class=\"heading-anchor\" href=\"#module-django.utils.decorators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.method_decorator\">\n<span class=\"sig-name descname\">method_decorator</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">decorator</em>, <em class=\"sig-param\">name<span class=\"o\">=</span><span class=\"default_value\">''</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.method_decorator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将函数装饰器转换为方法装饰器。它可以用来装饰方法或类；在后一种情况下，<code class=\"docutils literal notranslate\">name</code> 是要装饰的方法的名称，并且是必需的。</p>\n<p><code class=\"docutils literal notranslate\">decorator</code> 也可以是一个函数列表或元组。它们以相反的顺序包装，因此调用顺序是函数在列表／元组中出现的顺序。</p>\n<p>参见 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">装饰基于类的视图</span></a> 的用法示例。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.decorator_from_middleware\">\n<span class=\"sig-name descname\">decorator_from_middleware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">middleware_class</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.decorator_from_middleware\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>给定一个中间件类，返回一个视图装饰器。这让你可以在每个视图的基础上使用中间件功能。中间件的创建不需要传递参数。</p>\n<p>它假设中间件与 Django 1.9 和更早的老式中间件兼容（有 <code class=\"docutils literal notranslate\">process_request()</code>、<code class=\"docutils literal notranslate\">process_exception()</code> 和 <code class=\"docutils literal notranslate\">process_response()</code> 等方法）。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.decorator_from_middleware_with_args\">\n<span class=\"sig-name descname\">decorator_from_middleware_with_args</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">middleware_class</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.decorator_from_middleware_with_args\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>像 <code class=\"docutils literal notranslate\">decorator_from_middleware</code> 一样，但是返回一个接受参数的函数，传递给 middleware_class。例如，<a class=\"reference internal\" href=\"/zh-hans/6.0/topics/cache/#django.views.decorators.cache.cache_page\" title=\"django.views.decorators.cache.cache_page\"><code class=\"xref py py-func docutils literal notranslate\">cache_page()</code></a> 装饰器是从 <code class=\"docutils literal notranslate\">CacheMiddleware</code> 中创建的，就像这样：</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>cache_page <span class=\"o\">=</span> decorator_from_middleware_with_args<span class=\"p\">(</span>CacheMiddleware<span class=\"p\">)</span>\n\n\n<span class=\"nd\">@cache_page</span><span class=\"p\">(</span><span class=\"mi\">3600</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.sync_only_middleware\">\n<span class=\"sig-name descname\">sync_only_middleware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">middleware</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.sync_only_middleware\"><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/6.0/topics/http/middleware/#async-middleware\"><span class=\"std std-ref\">仅同步</span></a>。（Django 中的默认值，但这允许你在未来的版本中改变默认值的情况下对其进行保护。）</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.async_only_middleware\">\n<span class=\"sig-name descname\">async_only_middleware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">middleware</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.async_only_middleware\"><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/6.0/topics/http/middleware/#async-middleware\"><span class=\"std std-ref\">仅异步</span></a>。当它从 WSGI 请求路径被调用时，Django 将把它包装在异步事件循环中。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.decorators.sync_and_async_middleware\">\n<span class=\"sig-name descname\">sync_and_async_middleware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">middleware</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.decorators.sync_and_async_middleware\"><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/6.0/topics/http/middleware/#async-middleware\"><span class=\"std std-ref\">同步和异步兼容</span></a>，这样可以避免转换请求。你必须实现对当前请求类型的检测才能使用这个装饰器。详情请看 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/http/middleware/#async-middleware\"><span class=\"std std-ref\">异步中间件文档</span></a>。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.encoding\">\n<span id=\"django-utils-encoding\"></span><h2><code class=\"docutils literal notranslate\">django.utils.encoding</code><a class=\"heading-anchor\" href=\"#module-django.utils.encoding\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.smart_str\">\n<span class=\"sig-name descname\">smart_str</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em>, <em class=\"sig-param\">encoding<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">strings_only<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">errors<span class=\"o\">=</span><span class=\"default_value\">'strict'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.smart_str\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回一个代表任意对象 <code class=\"docutils literal notranslate\">s</code> 的 <code class=\"docutils literal notranslate\">str</code> 对象。使用 <code class=\"docutils literal notranslate\">encoding</code> 编解码器处理字节字符串。</p>\n<p>如果 <code class=\"docutils literal notranslate\">strings_only</code> 是 <code class=\"docutils literal notranslate\">True</code>，不要转换（一些）非字符串类对象。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.is_protected_type\">\n<span class=\"sig-name descname\">is_protected_type</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.is_protected_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>确定对象实例是否属于一个受保护的类型。</p>\n<p>当传递给 <code class=\"docutils literal notranslate\">force_str(strings_only=True)</code> 时，受保护类型的对象会被原样保存。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.force_str\">\n<span class=\"sig-name descname\">force_str</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em>, <em class=\"sig-param\">encoding<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">strings_only<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">errors<span class=\"o\">=</span><span class=\"default_value\">'strict'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.force_str\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>类似于 <code class=\"docutils literal notranslate\">smart_str()</code>，除了惰性实例被解析为字符串，而不是作为惰性对象保存。</p>\n<p>如果 <code class=\"docutils literal notranslate\">strings_only</code> 是 <code class=\"docutils literal notranslate\">True</code>，不要转换（一些）非字符串类对象。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.smart_bytes\">\n<span class=\"sig-name descname\">smart_bytes</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em>, <em class=\"sig-param\">encoding<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">strings_only<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">errors<span class=\"o\">=</span><span class=\"default_value\">'strict'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.smart_bytes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回任意对象 <code class=\"docutils literal notranslate\">s</code> 的字节字符串版本，按照 <code class=\"docutils literal notranslate\">encoding</code> 中指定的编码。</p>\n<p>如果 <code class=\"docutils literal notranslate\">strings_only</code> 是 <code class=\"docutils literal notranslate\">True</code>，不要转换（一些）非字符串类对象。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.force_bytes\">\n<span class=\"sig-name descname\">force_bytes</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em>, <em class=\"sig-param\">encoding<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">strings_only<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">errors<span class=\"o\">=</span><span class=\"default_value\">'strict'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.force_bytes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>类似于 <code class=\"docutils literal notranslate\">smart_bytes</code>，除了惰性实例被解析为字节字符串，而不是作为惰性对象保存。</p>\n<p>如果 <code class=\"docutils literal notranslate\">strings_only</code> 是 <code class=\"docutils literal notranslate\">True</code>，不要转换（一些）非字符串类对象。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.iri_to_uri\">\n<span class=\"sig-name descname\">iri_to_uri</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">iri</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.iri_to_uri\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将国际化资源标识符（IRI）部分转换为适合包含在 URL 中的 URI 部分。</p>\n<p>这是 <span class=\"target\" id=\"index-18\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3987.html#section-3.1\"><strong>RFC 3987 Section 3.1</strong></a> 中第 3.1 节的算法，由于假设输入是一个字符串而不是任意字节流，所以略作简化。</p>\n<p>取一个 IRI（字符串或 UTF-8 字节）并返回一个包含编码结果的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.uri_to_iri\">\n<span class=\"sig-name descname\">uri_to_iri</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">uri</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.uri_to_iri\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将统一资源标识符转换为国际化资源标识符。</p>\n<p>这是 <span class=\"target\" id=\"index-19\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3987.html#section-3.2\"><strong>RFC 3987 Section 3.2</strong></a> 第 3.2 节中的一个算法。</p>\n<p>获取一个 ASCII 字节的 URI，并返回一个包含编码结果的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.filepath_to_uri\">\n<span class=\"sig-name descname\">filepath_to_uri</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.filepath_to_uri\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将一个文件系统路径转换为适合包含在 URL 中的 URI 部分。路径假定为 UTF-8 字节、字符串或一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.Path\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">Path</code></a>。</p>\n<p>This method will encode certain characters that would normally be\nrecognized as special characters for URIs. Note that this method does not\nencode the ' character, as it is a valid character within URIs. See\n<code class=\"docutils literal notranslate\">encodeURIComponent()</code> JavaScript function for more details.</p>\n<p>返回一个包含编码结果的 ASCII 字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.escape_uri_path\">\n<span class=\"sig-name descname\">escape_uri_path</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.escape_uri_path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>从统一资源标识符（URI）的路径部分转出不安全字符。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.feedgenerator\">\n<span id=\"django-utils-feedgenerator\"></span><h2><code class=\"docutils literal notranslate\">django.utils.feedgenerator</code><a class=\"heading-anchor\" href=\"#module-django.utils.feedgenerator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>示例用法：</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> feedgenerator\n<span class=\"gp\">&gt;&gt;&gt; </span>feed <span class=\"o\">=</span> feedgenerator<span class=\"o\">.</span>Rss201rev2Feed<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    title<span class=\"o\">=</span><span class=\"s2\">&quot;Poynter E-Media Tidbits&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    link<span class=\"o\">=</span><span class=\"s2\">&quot;https://www.poynter.org/tag/e-media-tidbits/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    description<span class=\"o\">=</span><span class=\"s2\">&quot;A group blog by the sharpest minds in online media/journalism/publishing.&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    language<span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>feed<span class=\"o\">.</span>add_item<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    title<span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    link<span class=\"o\">=</span><span class=\"s2\">&quot;https://www.holovaty.com/test/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    description<span class=\"o\">=</span><span class=\"s2\">&quot;Testing.&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;test.rss&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> fp<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    feed<span class=\"o\">.</span>write<span class=\"p\">(</span>fp<span class=\"p\">,</span> <span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>为了简化生成器的选择，使用 <code class=\"docutils literal notranslate\">feedgenerator.DefaultFeed</code>，目前是 <code class=\"docutils literal notranslate\">Rss201rev2Feed</code>。</p>\n<p>For definitions of the different versions of RSS, see <a class=\"reference external\" href=\"https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss\">The myth of RSS\ncompatibility</a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.get_tag_uri\">\n<span class=\"sig-name descname\">get_tag_uri</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">url</em>, <em class=\"sig-param\">date</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.get_tag_uri\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 TagURI。</p>\n<p>See <a class=\"reference external\" href=\"https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id\">How to make a good ID in Atom</a>.</p>\n</dd></dl>\n\n<section id=\"stylesheet\">\n<h3><code class=\"docutils literal notranslate\">样式表</code><a class=\"heading-anchor\" href=\"#stylesheet\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Stylesheet\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Stylesheet</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">url</em>, <em class=\"sig-param\">mimetype<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">media<span class=\"o\">=</span><span class=\"default_value\">'screen'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Stylesheet\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>表示 RSS 样式表。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Stylesheet.url\">\n<span class=\"sig-name descname\">url</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Stylesheet.url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>必需的参数。样式表所在的 URL 。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Stylesheet.mimetype\">\n<span class=\"sig-name descname\">mimetype</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Stylesheet.mimetype\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An optional string containing the MIME type of the stylesheet. If not\nspecified, Django will attempt to guess it by using Python's\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/mimetypes.html#mimetypes.guess_type\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">mimetypes.guess_type()</code></a>. Use <code class=\"docutils literal notranslate\">mimetype=None</code> if you don't\nwant your stylesheet to have a MIME type specified.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Stylesheet.media\">\n<span class=\"sig-name descname\">media</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Stylesheet.media\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An optional string which will be used as the <code class=\"docutils literal notranslate\">media</code> attribute of\nthe stylesheet. Defaults to <code class=\"docutils literal notranslate\">&quot;screen&quot;</code>. Use <code class=\"docutils literal notranslate\">media=None</code> if you\ndon't want your stylesheet to have a <code class=\"docutils literal notranslate\">media</code> attribute.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"syndicationfeed\">\n<h3><code class=\"docutils literal notranslate\">SyndicationFeed</code><a class=\"heading-anchor\" href=\"#syndicationfeed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SyndicationFeed</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>所有聚合 feed 的基类。子类应该提供 write()。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.__init__\">\n<span class=\"sig-name descname\">__init__</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">title</em>, <em class=\"sig-param\">link</em>, <em class=\"sig-param\">description</em>, <em class=\"sig-param\">language<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">author_email<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">author_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">author_link<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">subtitle<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">categories<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">feed_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">feed_copyright<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">feed_guid<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ttl<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">stylesheets<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.__init__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>用给定的元数据字典初始化 feed，它适用于整个 feed。</p>\n<p>你传递给 <code class=\"docutils literal notranslate\">__init__</code> 的任何额外的关键字参数将被存储在 <code class=\"docutils literal notranslate\">self.feed</code> 中。</p>\n<p>All parameters should be strings, except for two:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">categories</code> 应是一个字符串序列。</p></li>\n<li><p><code class=\"docutils literal notranslate\">stylesheets</code> should be a sequence of either strings or\n<a class=\"reference internal\" href=\"#django.utils.feedgenerator.Stylesheet\" title=\"django.utils.feedgenerator.Stylesheet\"><code class=\"xref py py-class docutils literal notranslate\">Stylesheet</code></a> instances.</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>The <code class=\"docutils literal notranslate\">stylesheets</code> argument was added.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.add_item\">\n<span class=\"sig-name descname\">add_item</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">title</em>, <em class=\"sig-param\">link</em>, <em class=\"sig-param\">description</em>, <em class=\"sig-param\">author_email<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">author_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">author_link<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">pubdate<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">comments<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">unique_id<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">categories<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\">item_copyright<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ttl<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">updateddate<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">enclosures<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.add_item\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>添加一个项目到 feed 中。除了 <code class=\"docutils literal notranslate\">pubdate</code> 和 <code class=\"docutils literal notranslate\">updateddate</code> 是 <code class=\"docutils literal notranslate\">datetime.datetime</code> 对象和 <code class=\"docutils literal notranslate\">enclosures</code> 是 <code class=\"docutils literal notranslate\">Enclosure</code> 实例的列表外，所有参数都应该是字符串。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.num_items\">\n<span class=\"sig-name descname\">num_items</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.num_items\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.root_attributes\">\n<span class=\"sig-name descname\">root_attributes</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.root_attributes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回要放在根元素（即 feed/channel）上的额外属性。从 <code class=\"docutils literal notranslate\">write()</code> 调用。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.add_root_elements\">\n<span class=\"sig-name descname\">add_root_elements</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">handler</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.add_root_elements\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在根（即 feed/channel）元素中添加元素。由 <code class=\"docutils literal notranslate\">write()</code> 调用。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.add_stylesheets\">\n<span class=\"sig-name descname\">add_stylesheets</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">self</em>, <em class=\"sig-param\">handler</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.add_stylesheets\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>Add stylesheet information to the document.\nCalled from <code class=\"docutils literal notranslate\">write()</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.item_attributes\">\n<span class=\"sig-name descname\">item_attributes</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">item</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.item_attributes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回要放在每个项目（即 item/entry）元素上的额外属性。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.add_item_elements\">\n<span class=\"sig-name descname\">add_item_elements</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">handler</em>, <em class=\"sig-param\">item</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.add_item_elements\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在每个项目（即 item/entry）元素上添加元素。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.write\">\n<span class=\"sig-name descname\">write</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">outfile</em>, <em class=\"sig-param\">encoding</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.write\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将给定编码的 feed 输出到 <code class=\"docutils literal notranslate\">outfile</code>，这是一个类似文件的对象。子类应该覆盖这个。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.writeString\">\n<span class=\"sig-name descname\">writeString</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">encoding</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.writeString\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>以字符串形式返回给定编码的 feed。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.SyndicationFeed.latest_post_date\">\n<span class=\"sig-name descname\">latest_post_date</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.SyndicationFeed.latest_post_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回 feed 中所有项目的最新 <code class=\"docutils literal notranslate\">pubdate</code> 或 <code class=\"docutils literal notranslate\">updateddate</code>。如果没有项目有这些属性，则返回当前的 UTC 日期／时间。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"enclosure\">\n<h3><code class=\"docutils literal notranslate\">Enclosure</code><a class=\"heading-anchor\" href=\"#enclosure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Enclosure\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Enclosure</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Enclosure\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>代表一个 RSS enclosure</p>\n</dd></dl>\n\n</section>\n<section id=\"rssfeed\">\n<h3><code class=\"docutils literal notranslate\">RssFeed</code><a class=\"heading-anchor\" href=\"#rssfeed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.RssFeed\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RssFeed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">SyndicationFeed</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.RssFeed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n</section>\n<section id=\"rss201rev2feed\">\n<h3><code class=\"docutils literal notranslate\">Rss201rev2Feed</code><a class=\"heading-anchor\" href=\"#rss201rev2feed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Rss201rev2Feed\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Rss201rev2Feed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">RssFeed</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Rss201rev2Feed\"><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://cyber.harvard.edu/rss/rss.html\">https://cyber.harvard.edu/rss/rss.html</a></p>\n</dd></dl>\n\n</section>\n<section id=\"rssuserland091feed\">\n<h3><code class=\"docutils literal notranslate\">RssUserland091Feed</code><a class=\"heading-anchor\" href=\"#rssuserland091feed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.RssUserland091Feed\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RssUserland091Feed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">RssFeed</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.RssUserland091Feed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>参见： <a class=\"reference external\" href=\"http://backend.userland.com/rss091\">http://backend.userland.com/rss091</a></p>\n</dd></dl>\n\n</section>\n<section id=\"atom1feed\">\n<h3><code class=\"docutils literal notranslate\">Atom1Feed</code><a class=\"heading-anchor\" href=\"#atom1feed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.feedgenerator.Atom1Feed\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Atom1Feed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">SyndicationFeed</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.feedgenerator.Atom1Feed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>规格： <span class=\"target\" id=\"index-20\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4287.html\"><strong>RFC 4287</strong></a></p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"module-django.utils.functional\">\n<span id=\"django-utils-functional\"></span><h2><code class=\"docutils literal notranslate\">django.utils.functional</code><a class=\"heading-anchor\" href=\"#module-django.utils.functional\"><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.utils.functional.cached_property\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">cached_property</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">func</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.functional.cached_property\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">&#64;cached_property</code> 装饰器将一个方法的结果缓存起来，该方法有一个 <code class=\"docutils literal notranslate\">self</code> 参数作为属性。只要实例存在，缓存的结果就会持续存在，所以如果实例被传来传去，并且随后函数被调用，缓存的结果就会被返回。</p>\n<p>考虑一个典型的情况，在将模型实例放入上下文之前，视图可能需要调用模型的方法来执行一些计算，在上下文中，模板可能会再次调用该方法：</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=\"c1\"># the model</span>\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">friends</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># expensive computation</span>\n        <span class=\"o\">...</span>\n        <span class=\"k\">return</span> friends\n\n\n<span class=\"c1\"># in the view:</span>\n<span class=\"k\">if</span> person<span class=\"o\">.</span>friends<span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>而在模板中，你会有：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">friend</span> <span class=\"k\">in</span> <span class=\"nv\">person.friends</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>在这里，<code class=\"docutils literal notranslate\">friends()</code> 将被调用两次。由于视图和模板中的实例 <code class=\"docutils literal notranslate\">person</code> 是一样的，所以用 <code class=\"docutils literal notranslate\">&#64;cached_property</code> 来装饰 <code class=\"docutils literal notranslate\">friends()</code> 方法可以避免这种情况：</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=\"nn\">django.utils.functional</span> <span class=\"kn\">import</span> cached_property\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">friends</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>请注意，由于该方法现在是一个属性，所以在 Python 代码中需要适当地访问它：</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=\"c1\"># in the view:</span>\n<span class=\"k\">if</span> person<span class=\"o\">.</span>friends<span class=\"p\">:</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>缓存值可以像实例的普通属性一样对待：</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=\"c1\"># clear it, requiring re-computation next time it&#39;s called</span>\nperson<span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"o\">.</span>pop<span class=\"p\">(</span><span class=\"s2\">&quot;friends&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># set a value manually, that will persist on the instance until cleared</span>\nperson<span class=\"o\">.</span>friends <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Huckleberry Finn&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Tom Sawyer&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Because of the way the <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#descriptor-invocation\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">descriptor protocol</span></a> works, using <code class=\"docutils literal notranslate\">del</code> (or <code class=\"docutils literal notranslate\">delattr</code>) on a\n<code class=\"docutils literal notranslate\">cached_property</code> that hasn't been accessed raises <code class=\"docutils literal notranslate\">AttributeError</code>.</p>\n<p>除了提供潜在的性能优势外，<code class=\"docutils literal notranslate\">&#64;cached_property</code> 还可以确保一个属性的值在一个实例的生命周期内不会发生意外变化。如果一个方法的计算是基于 <code class=\"docutils literal notranslate\">datetime.now()</code> 的，或者如果在同一实例上的一个方法的后续调用之间的短暂间隔中，变化被其他进程保存到数据库中，就可能发生这种情况。</p>\n<p>你可以使用方法的缓存属性。例如，如果你有一个昂贵的 <code class=\"docutils literal notranslate\">get_friends()</code> 方法，并且想允许调用它而不检索缓存值，你可以编写：</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>friends <span class=\"o\">=</span> cached_property<span class=\"p\">(</span>get_friends<span class=\"p\">)</span>\n</code></pre></div>\n<p>虽然 <code class=\"docutils literal notranslate\">person.get_friends()</code> 会在每次调用时重新计算，但缓存属性的值会一直存在，直到你如上所述删除它为止：</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>x <span class=\"o\">=</span> person<span class=\"o\">.</span>friends  <span class=\"c1\"># calls first time</span>\ny <span class=\"o\">=</span> person<span class=\"o\">.</span>get_friends<span class=\"p\">()</span>  <span class=\"c1\"># calls again</span>\nz <span class=\"o\">=</span> person<span class=\"o\">.</span>friends  <span class=\"c1\"># does not call</span>\nx <span class=\"ow\">is</span> z  <span class=\"c1\"># is True</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.functional.classproperty\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">classproperty</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">method<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.functional.classproperty\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Similar to <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#classmethod\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">&#64;classmethod</code></a>, the <code class=\"docutils literal notranslate\">&#64;classproperty</code>\ndecorator converts the result of a method with a single <code class=\"docutils literal notranslate\">cls</code> argument\ninto a property that can be accessed directly from the class.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.functional.keep_lazy\">\n<span class=\"sig-name descname\">keep_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">func</em>, <em class=\"sig-param\"><span class=\"o\">*</span>resultclasses</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.functional.keep_lazy\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django 提供了许多实用函数（特别是在 <code class=\"docutils literal notranslate\">django.utils</code> 中），这些函数将一个字符串作为它们的第一个参数，并对该字符串进行处理。这些函数可以被模板过滤器使用，也可以直接在其他代码中使用。</p>\n<p>如果你自己编写类似的函数并处理翻译，你会面临这样一个问题：当第一个参数是一个惰性翻译对象时，该怎么办？你不想立即将其转换为字符串，因为你可能会在视图之外使用这个函数（因此当前线程的 locale 配置将不正确）。</p>\n<p>对于这样的情况，可以使用 <code class=\"docutils literal notranslate\">django.utils.functional.keep_lazy()</code> 装饰器。它可以修改函数，使其在调用时，<em>如果</em> 参数是惰性翻译，则函数的执行会被延迟，直到需要将其转换为字符串。</p>\n<p>例子：</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=\"nn\">django.utils.functional</span> <span class=\"kn\">import</span> keep_lazy<span class=\"p\">,</span> keep_lazy_text\n\n\n<span class=\"k\">def</span> <span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span>s<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n    <span class=\"c1\"># Do some conversion on string &#39;s&#39;</span>\n    <span class=\"o\">...</span>\n\n\nfancy_utility_function <span class=\"o\">=</span> keep_lazy<span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)(</span>fancy_utility_function<span class=\"p\">)</span>\n\n\n<span class=\"c1\"># Or more succinctly:</span>\n<span class=\"nd\">@keep_lazy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span>s<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">keep_lazy()</code> 装饰器需要一些额外的参数（<code class=\"docutils literal notranslate\">*args</code>）来指定原始函数可以返回的类型。一个常见的用例是返回文本的函数。对于这些函数，你可以将 <code class=\"docutils literal notranslate\">str</code> 类型传递给 <code class=\"docutils literal notranslate\">keep_lazy</code> （或者使用下一节描述的 <a class=\"reference internal\" href=\"#django.utils.functional.keep_lazy_text\" title=\"django.utils.functional.keep_lazy_text\"><code class=\"xref py py-func docutils literal notranslate\">keep_lazy_text()</code></a> 装饰器）。</p>\n<p>使用这个装饰器意味着你可以编写你的函数，并假设输入是一个正确的字符串，然后在最后添加对惰性翻译对象的支持。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.functional.keep_lazy_text\">\n<span class=\"sig-name descname\">keep_lazy_text</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">func</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.functional.keep_lazy_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">keep_lazy(str)(func)</code> 的快捷方式。</p>\n<p>如果你有一个返回文本的函数，并且你希望能够在延迟其执行的同时接受惰性参数，你可以使用这个装饰器：</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=\"nn\">django.utils.functional</span> <span class=\"kn\">import</span> keep_lazy<span class=\"p\">,</span> keep_lazy_text\n\n\n<span class=\"c1\"># Our previous example was:</span>\n<span class=\"nd\">@keep_lazy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span>s<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span> <span class=\"o\">...</span>\n\n\n<span class=\"c1\"># Which can be rewritten as:</span>\n<span class=\"nd\">@keep_lazy_text</span>\n<span class=\"k\">def</span> <span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span>s<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.html\">\n<span id=\"django-utils-html\"></span><h2><code class=\"docutils literal notranslate\">django.utils.html</code><a class=\"heading-anchor\" href=\"#module-django.utils.html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>通常情况下，你应该使用 Django 的模板来构建 HTML，以利用它的自动转义机制，在适当的地方使用 <a class=\"reference internal\" href=\"#module-django.utils.safestring\" title=\"django.utils.safestring: Functions and classes for working with strings that can be displayed safely without further escaping in HTML.\"><code class=\"xref py py-mod docutils literal notranslate\">django.utils.safestring</code></a> 中的实用程序。这个模块提供了一些额外的低级实用程序来处理 HTML。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.escape\">\n<span class=\"sig-name descname\">escape</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.escape\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回给定的文本，并对其的符号、引号和角括号进行编码，以便在 HTML 中使用。输入的内容首先被强制为一个字符串，输出的内容被应用了 <a class=\"reference internal\" href=\"#django.utils.safestring.mark_safe\" title=\"django.utils.safestring.mark_safe\"><code class=\"xref py py-func docutils literal notranslate\">mark_safe()</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.conditional_escape\">\n<span class=\"sig-name descname\">conditional_escape</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.conditional_escape\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Similar to <code class=\"docutils literal notranslate\">escape()</code>, except that it doesn't operate on pre-escaped\nstrings, so it will not double escape.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.format_html\">\n<span class=\"sig-name descname\">format_html</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">format_string</em>, <em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.format_html\"><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#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">str.format()</code></a>，但适用于构建 HTML 片段。第一个参数 <code class=\"docutils literal notranslate\">format_string</code> 不会被转义，但所有其他的参数和关键字参数在传递给 <code class=\"docutils literal notranslate\">str.format()</code> 之前都会通过 <a class=\"reference internal\" href=\"#django.utils.html.conditional_escape\" title=\"django.utils.html.conditional_escape\"><code class=\"xref py py-func docutils literal notranslate\">conditional_escape()</code></a> 进行转义。最后，输出将应用 <a class=\"reference internal\" href=\"#django.utils.safestring.mark_safe\" title=\"django.utils.safestring.mark_safe\"><code class=\"xref py py-func docutils literal notranslate\">mark_safe()</code></a>。</p>\n<p>对于构建小型 HTML 片段的情况，这个函数比直接使用 <code class=\"docutils literal notranslate\">%</code> 或 <code class=\"docutils literal notranslate\">str.format()</code> 进行字符串插值要好，因为它对所有参数都应用了转义 —— 就像模板系统默认应用转义一样。</p>\n<p>所以，不要写：</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>mark_safe<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> &lt;b&gt;</span><span class=\"si\">%s</span><span class=\"s2\">&lt;/b&gt; </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span>\n    <span class=\"o\">%</span> <span class=\"p\">(</span>\n        some_html<span class=\"p\">,</span>\n        escape<span class=\"p\">(</span>some_text<span class=\"p\">),</span>\n        escape<span class=\"p\">(</span>some_other_text<span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>你应该用：</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>format_html<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;</span><span class=\"si\">{}</span><span class=\"s2\"> &lt;b&gt;</span><span class=\"si\">{}</span><span class=\"s2\">&lt;/b&gt; </span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n    mark_safe<span class=\"p\">(</span>some_html<span class=\"p\">),</span>\n    some_text<span class=\"p\">,</span>\n    some_other_text<span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>这样做的好处是，你不需要对每个参数应用 <a class=\"reference internal\" href=\"#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\">escape()</code></a>，如果你忘记了一个参数，就有可能出现错误和 XSS 漏洞。</p>\n<p>请注意，虽然这个函数使用 <code class=\"docutils literal notranslate\">str.format()</code> 来进行内插，但 <code class=\"docutils literal notranslate\">str.format()</code> 提供的一些格式化选项（例如数字格式化）将无法使用，因为所有参数都通过 <a class=\"reference internal\" href=\"#django.utils.html.conditional_escape\" title=\"django.utils.html.conditional_escape\"><code class=\"xref py py-func docutils literal notranslate\">conditional_escape()</code></a>，而这个函数（最终）会调用 <a class=\"reference internal\" href=\"#django.utils.encoding.force_str\" title=\"django.utils.encoding.force_str\"><code class=\"xref py py-func docutils literal notranslate\">force_str()</code></a> 来处理这些值。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.format_html_join\">\n<span class=\"sig-name descname\">format_html_join</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">sep</em>, <em class=\"sig-param\">format_string</em>, <em class=\"sig-param\">args_generator</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.format_html_join\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.utils.html.format_html\" title=\"django.utils.html.format_html\"><code class=\"xref py py-func docutils literal notranslate\">format_html()</code></a> 的一个封装器，用于常见的情况，即一组参数需要使用相同的格式字符串进行格式化，然后使用 <code class=\"docutils literal notranslate\">sep</code> 加入。<code class=\"docutils literal notranslate\">sep</code> 也通过 <a class=\"reference internal\" href=\"#django.utils.html.conditional_escape\" title=\"django.utils.html.conditional_escape\"><code class=\"xref py py-func docutils literal notranslate\">conditional_escape()</code></a> 传递。</p>\n<p><code class=\"docutils literal notranslate\">args_generator</code> should be an iterator that yields arguments to pass to\n<a class=\"reference internal\" href=\"#django.utils.html.format_html\" title=\"django.utils.html.format_html\"><code class=\"xref py py-func docutils literal notranslate\">format_html()</code></a>, either sequences of positional arguments or mappings\nof keyword arguments.</p>\n<p>例如，元组可用于位置参数：</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>format_html_join<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;&lt;li&gt;</span><span class=\"si\">{}</span><span class=\"s2\"> </span><span class=\"si\">{}</span><span class=\"s2\">&lt;/li&gt;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">((</span>u<span class=\"o\">.</span>first_name<span class=\"p\">,</span> u<span class=\"o\">.</span>last_name<span class=\"p\">)</span> <span class=\"k\">for</span> u <span class=\"ow\">in</span> users<span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>或者字典可用于关键字参数：</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>format_html_join<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;&lt;li data-id=&quot;</span><span class=\"si\">{id}</span><span class=\"s1\">&quot;&gt;</span><span class=\"si\">{id}</span><span class=\"s1\"> </span><span class=\"si\">{title}</span><span class=\"s1\">&lt;/li&gt;&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">({</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> b<span class=\"o\">.</span>id<span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> b<span class=\"o\">.</span>title<span class=\"p\">}</span> <span class=\"k\">for</span> b <span class=\"ow\">in</span> books<span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>Support for mappings in <code class=\"docutils literal notranslate\">args_generator</code> was added.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.json_script\">\n<span class=\"sig-name descname\">json_script</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">element_id<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">encoder<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.json_script\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将所有 HTML/XML 特殊字符用它们的 Unicode 转义进行转义，以便将值安全地用于 JavaScript。还将转义后的 JSON 包装在一个 <code class=\"docutils literal notranslate\">&lt;script&gt;</code> 标签中。如果 <code class=\"docutils literal notranslate\">element_id</code> 参数不为 <code class=\"docutils literal notranslate\">None</code>，则将传递的 id 分配给 <code class=\"docutils literal notranslate\">&lt;script&gt;</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=\"gp\">&gt;&gt;&gt; </span>json_script<span class=\"p\">({</span><span class=\"s2\">&quot;hello&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;world&quot;</span><span class=\"p\">},</span> element_id<span class=\"o\">=</span><span class=\"s2\">&quot;hello-data&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&lt;script id=&quot;hello-data&quot; type=&quot;application/json&quot;&gt;{&quot;hello&quot;: &quot;world&quot;}&lt;/script&gt;&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">encoder</code>，默认为 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\">django.core.serializers.json.DjangoJSONEncoder</code></a>，将用于序列化数据。关于这个序列化器的更多细节，请参见 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/serialization/#serialization-formats-json\"><span class=\"std std-ref\">JSON 序列化</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.strip_tags\">\n<span class=\"sig-name descname\">strip_tags</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.strip_tags\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>试图从字符串中删除任何类似 HTML 标签的内容，即包含在 <code class=\"docutils literal notranslate\">&lt;&gt;</code> 内的任何内容。</p>\n<p>Absolutely NO guarantee is provided about the resulting string being\nHTML safe. So NEVER mark safe the result of a <code class=\"docutils literal notranslate\">strip_tags</code> call without\nescaping it first, for example with <a class=\"reference internal\" href=\"#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\">escape()</code></a>.</p>\n<p>例子：</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>strip_tags<span class=\"p\">(</span>value<span class=\"p\">)</span>\n</code></pre></div>\n<p>如果 <code class=\"docutils literal notranslate\">value</code> 是 <code class=\"docutils literal notranslate\">&quot;&lt;b&gt;Joel&lt;/b&gt; &lt;button&gt;is&lt;/button&gt; a &lt;span&gt;slug&lt;/span&gt;&quot;</code> 返回值将是 <code class=\"docutils literal notranslate\">&quot;Joel is a slug&quot;</code>。</p>\n<p>如果你正在寻找更强大的解决方案，考虑使用第三方的 HTML 清理工具。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.html.html_safe\">\n<span class=\"sig-name descname\">html_safe</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.html.html_safe\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>类上的 <code class=\"docutils literal notranslate\">__html__()</code> 方法可以帮助非 Django 模板检测其输出不需要 HTML 转义的类。</p>\n<p>这个装饰器通过在 <a class=\"reference internal\" href=\"#django.utils.safestring.mark_safe\" title=\"django.utils.safestring.mark_safe\"><code class=\"xref py py-meth docutils literal notranslate\">mark_safe()</code></a> 中封装 <code class=\"docutils literal notranslate\">__str__()</code> 来定义被装饰的类上的 <code class=\"docutils literal notranslate\">__html__()</code> 方法。确保 <code class=\"docutils literal notranslate\">__str__()</code> 方法确实返回不需要 HTML 转义的文本。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.http\">\n<span id=\"django-utils-http\"></span><h2><code class=\"docutils literal notranslate\">django.utils.http</code><a class=\"heading-anchor\" href=\"#module-django.utils.http\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.urlencode\">\n<span class=\"sig-name descname\">urlencode</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em>, <em class=\"sig-param\">doseq<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.urlencode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Python 的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">urllib.parse.urlencode()</code></a> 函数的一个版本，可以对 <code class=\"docutils literal notranslate\">MultiValueDict</code> 和非字符串值进行操作。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.http_date\">\n<span class=\"sig-name descname\">http_date</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">epoch_seconds<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.http_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将时间格式化为与 HTTP <span class=\"target\" id=\"index-21\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-5.6.7\"><strong>RFC 9110 Section 5.6.7</strong></a> 指定的 <span class=\"target\" id=\"index-22\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc1123.html#section-5.2.14\"><strong>RFC 1123 Section 5.2.14</strong></a> 日期格式相匹配。</p>\n<p>接受自 UTC 以来以秒为单位的浮点数，如 <code class=\"docutils literal notranslate\">time.time()</code> 输出的时间。如果设置为 <code class=\"docutils literal notranslate\">None</code>，默认为当前时间。</p>\n<p>输出格式为 <code class=\"docutils literal notranslate\">Wdy, DD Mon YYYY HH:MM:SS GMT</code> 的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.content_disposition_header\">\n<span class=\"sig-name descname\">content_disposition_header</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">as_attachment</em>, <em class=\"sig-param\">filename</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.content_disposition_header\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>根据 <span class=\"target\" id=\"index-23\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc6266.html\"><strong>RFC 6266</strong></a> 从给定的 <code class=\"docutils literal notranslate\">filename</code> 构造一个 <code class=\"docutils literal notranslate\">Content-Disposition</code> HTTP 标头值。如果 <code class=\"docutils literal notranslate\">as_attachment</code> 为 <code class=\"docutils literal notranslate\">False</code> 并且 <code class=\"docutils literal notranslate\">filename</code> 为 <code class=\"docutils literal notranslate\">None</code>，则返回 <code class=\"docutils literal notranslate\">None</code>，否则返回适用于 <code class=\"docutils literal notranslate\">Content-Disposition</code> HTTP 标头的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.base36_to_int\">\n<span class=\"sig-name descname\">base36_to_int</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.base36_to_int\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将 base 36 的字符串转换为整数。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.int_to_base36\">\n<span class=\"sig-name descname\">int_to_base36</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">i</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.int_to_base36\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将一个正整数转换为 base 36 字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.urlsafe_base64_encode\">\n<span class=\"sig-name descname\">urlsafe_base64_encode</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.urlsafe_base64_encode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将一个字节字符串编码为 base64 字符串，用于 URL 中，去掉所有尾部的等号。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.urlsafe_base64_decode\">\n<span class=\"sig-name descname\">urlsafe_base64_decode</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.urlsafe_base64_decode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>解码一个 base64 编码的字符串，将可能被剥离的尾部等号加回来。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.module_loading\">\n<span id=\"django-utils-module-loading\"></span><h2><code class=\"docutils literal notranslate\">django.utils.module_loading</code><a class=\"heading-anchor\" href=\"#module-django.utils.module_loading\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>用于处理 Python 模块的函数。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.module_loading.import_string\">\n<span class=\"sig-name descname\">import_string</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">dotted_path</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.module_loading.import_string\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>导入一个点分隔模块路径，并返回路径中最后一个名字所指定的属性／类。如果导入失败，则引发 <code class=\"docutils literal notranslate\">ImportError</code>。例如：</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=\"nn\">django.utils.module_loading</span> <span class=\"kn\">import</span> import_string\n\nValidationError <span class=\"o\">=</span> import_string<span class=\"p\">(</span><span class=\"s2\">&quot;django.core.exceptions.ValidationError&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>相当于：</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=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.safestring\">\n<span id=\"django-utils-safestring\"></span><h2><code class=\"docutils literal notranslate\">django.utils.safestring</code><a class=\"heading-anchor\" href=\"#module-django.utils.safestring\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>用于处理 “安全字符串” 的函数和类：在 HTML 中无需进一步转义就可以安全显示的字符串。将某一字符串标记为 “安全字符串” 意味着该字符串的制作者已经将那些不应该被 HTML 引擎解释的字符（例如 '&lt;'）转化为适当的实体。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.safestring.SafeString\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SafeString</span><a class=\"heading-anchor\" href=\"#django.utils.safestring.SafeString\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">str</code> 子类，为了 HTML 输出的目的，被特别标记为 “安全”（不需要进一步的转义）。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.safestring.mark_safe\">\n<span class=\"sig-name descname\">mark_safe</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.safestring.mark_safe\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>为（HTML）输出目的明确标记一个字符串为安全的。返回的对象可以用在任何适合字符串的地方。</p>\n<p>可以在一个字符串上多次调用。</p>\n<p>也可作为装饰器使用。</p>\n<p>对于构建 HTML 片段，你通常应该使用 <a class=\"reference internal\" href=\"#django.utils.html.format_html\" title=\"django.utils.html.format_html\"><code class=\"xref py py-func docutils literal notranslate\">django.utils.html.format_html()</code></a> 代替。</p>\n<p>如果修改了被标记为安全的字符串，它将重新变为不安全。例如：</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=\"gp\">&gt;&gt;&gt; </span>mystr <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;b&gt;Hello World&lt;/b&gt;   &quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>mystr <span class=\"o\">=</span> mark_safe<span class=\"p\">(</span>mystr<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">type</span><span class=\"p\">(</span>mystr<span class=\"p\">)</span>\n<span class=\"go\">&lt;class &#39;django.utils.safestring.SafeString&#39;&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>mystr <span class=\"o\">=</span> mystr<span class=\"o\">.</span>strip<span class=\"p\">()</span>  <span class=\"c1\"># removing whitespace</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">type</span><span class=\"p\">(</span>mystr<span class=\"p\">)</span>\n<span class=\"go\">&lt;type &#39;str&#39;&gt;</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.text\">\n<span id=\"django-utils-text\"></span><h2><code class=\"docutils literal notranslate\">django.utils.text</code><a class=\"heading-anchor\" href=\"#module-django.utils.text\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.text.format_lazy\">\n<span class=\"sig-name descname\">format_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">format_string</em>, <em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.text.format_lazy\"><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#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">str.format()</code></a> 用于 <code class=\"docutils literal notranslate\">format_string</code>、args` 和／或 <code class=\"docutils literal notranslate\">kwargs</code> 包含惰性对象时的版本。第一个参数是要格式化的字符串。例如：</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=\"nn\">django.utils.text</span> <span class=\"kn\">import</span> format_lazy\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.translation</span> <span class=\"kn\">import</span> pgettext_lazy\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span>\n        format_lazy<span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{person}</span><span class=\"s2\">/&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> person<span class=\"o\">=</span>pgettext_lazy<span class=\"p\">(</span><span class=\"s2\">&quot;URL&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;person&quot;</span><span class=\"p\">)),</span>\n        PersonDetailView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>这个例子允许翻译人员翻译部分 URL。如果 &quot;person&quot; 被翻译成 &quot;persona&quot;，正则表达式将匹配 <code class=\"docutils literal notranslate\">persona/(?P&lt;pk&gt;\\d+)/$</code>，例如 <code class=\"docutils literal notranslate\">persona/5/</code>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.text.slugify\">\n<span class=\"sig-name descname\">slugify</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">allow_unicode<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.text.slugify\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>通过以下方式将一个字符串转换为 URL slug。</p>\n<ol class=\"arabic simple\">\n<li><p>如果 <code class=\"docutils literal notranslate\">allow_unicode</code> 为 <code class=\"docutils literal notranslate\">False</code> （默认），则转换为 ASCII 码。</p></li>\n<li><p>转换为小写。</p></li>\n<li><p>删除非字母数字、下划线、连字符或空格的字符。</p></li>\n<li><p>将任何空格或重复的破折号替换为单破折号。</p></li>\n<li><p>移除前导和尾随的空格、破折号和下划线。</p></li>\n</ol>\n<p>例如：</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=\"gp\">&gt;&gt;&gt; </span>slugify<span class=\"p\">(</span><span class=\"s2\">&quot; Joel is a slug &quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;joel-is-a-slug&#39;</span>\n</code></pre></div>\n<p>如果要允许 Unicode 字符，请传递 <code class=\"docutils literal notranslate\">allow_unicode=True</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=\"gp\">&gt;&gt;&gt; </span>slugify<span class=\"p\">(</span><span class=\"s2\">&quot;你好 World&quot;</span><span class=\"p\">,</span> allow_unicode<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;你好-world&#39;</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.timezone\">\n<span id=\"django-utils-timezone\"></span><span id=\"time-zone-selection-functions\"></span><h2><code class=\"docutils literal notranslate\">django.utils.timezone</code><a class=\"heading-anchor\" href=\"#module-django.utils.timezone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.get_fixed_timezone\">\n<span class=\"sig-name descname\">get_fixed_timezone</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">offset</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.get_fixed_timezone\"><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/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">tzinfo</code></a> 实例，该实例表示一个与 UTC 有固定偏移的时区。</p>\n<p><code class=\"docutils literal notranslate\">offset</code> 是一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime.timedelta</code></a> 或一个整数分钟。UTC 以东的时区为正值，UTC 以西的时区为负值。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.get_default_timezone\">\n<span class=\"sig-name descname\">get_default_timezone</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.get_default_timezone\"><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/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">tzinfo</code></a> 实例，表示 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">默认时区</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.get_default_timezone_name\">\n<span class=\"sig-name descname\">get_default_timezone_name</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.get_default_timezone_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/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">默认时区</span></a> 的名称。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.get_current_timezone\">\n<span class=\"sig-name descname\">get_current_timezone</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.get_current_timezone\"><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/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">tzinfo</code></a> 实例，表示 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.get_current_timezone_name\">\n<span class=\"sig-name descname\">get_current_timezone_name</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.get_current_timezone_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/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a> 的名称。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.activate\">\n<span class=\"sig-name descname\">activate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">timezone</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.activate\"><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/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。<code class=\"docutils literal notranslate\">timezone</code> 参数必须是 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">tzinfo</code></a> 子类的实例或时区名称。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.deactivate\">\n<span class=\"sig-name descname\">deactivate</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.deactivate\"><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/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.override\">\n<span class=\"sig-name descname\">override</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">timezone</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.override\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This is a Python context manager that sets the <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a> on entry with <a class=\"reference internal\" href=\"#django.utils.timezone.activate\" title=\"django.utils.timezone.activate\"><code class=\"xref py py-func docutils literal notranslate\">activate()</code></a>, and restores\nthe previously active time zone on exit. If the <code class=\"docutils literal notranslate\">timezone</code> argument is\n<code class=\"docutils literal notranslate\">None</code>, the <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a> is unset\non entry with <a class=\"reference internal\" href=\"#django.utils.timezone.deactivate\" title=\"django.utils.timezone.deactivate\"><code class=\"xref py py-func docutils literal notranslate\">deactivate()</code></a> instead.</p>\n<p><code class=\"docutils literal notranslate\">override</code> 也可作为函数装饰器使用。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.localtime\">\n<span class=\"sig-name descname\">localtime</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">timezone<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.localtime\"><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/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a> 转换为不同的时区，默认为 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n<p>当省略 <code class=\"docutils literal notranslate\">value</code> 时，默认为 <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\">now()</code></a>。</p>\n<p>这个函数不适用于 naive 的日期，请使用 <a class=\"reference internal\" href=\"#django.utils.timezone.make_aware\" title=\"django.utils.timezone.make_aware\"><code class=\"xref py py-func docutils literal notranslate\">make_aware()</code></a> 代替。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.localdate\">\n<span class=\"sig-name descname\">localdate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">timezone<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.localdate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>使用 <a class=\"reference internal\" href=\"#django.utils.timezone.localtime\" title=\"django.utils.timezone.localtime\"><code class=\"xref py py-func docutils literal notranslate\">localtime()</code></a> 将一个已知道的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a> 转换为不同时区的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">date()</code></a>，默认为 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n<p>当省略 <code class=\"docutils literal notranslate\">value</code> 时，默认为 <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\">now()</code></a>。</p>\n<p>此功能不适用于 naive 的日期。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.now\">\n<span class=\"sig-name descname\">now</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.now\"><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/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>，表示当前的时间点。具体返回什么取决于 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> 的值。</p>\n<ul class=\"simple\">\n<li><p>如果 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> 是 <code class=\"docutils literal notranslate\">False</code>，这将是一个 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#naive-vs-aware-datetimes\"><span class=\"std std-ref\">naive</span></a> 的日期时间（即一个没有关联时区的日期时间），代表系统当地时区的当前时间。</p></li>\n<li><p>如果 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> 是 <code class=\"docutils literal notranslate\">True</code>，这将是一个 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#naive-vs-aware-datetimes\"><span class=\"std std-ref\">aware</span></a> 的日期时间，代表当前的 UTC 时间。请注意，无论 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_ZONE</code></a> 的值是多少， <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\">now()</code></a> 将始终返回以 UTC 为单位的时间；你可以使用 <a class=\"reference internal\" href=\"#django.utils.timezone.localtime\" title=\"django.utils.timezone.localtime\"><code class=\"xref py py-func docutils literal notranslate\">localtime()</code></a> 来获取当前时区的时间。</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.is_aware\">\n<span class=\"sig-name descname\">is_aware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.is_aware\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>如果 <code class=\"docutils literal notranslate\">value</code> 是感知的，返回 <code class=\"docutils literal notranslate\">True</code>，如果是 naive 的，则返回 <code class=\"docutils literal notranslate\">False</code>。本函数假设 <code class=\"docutils literal notranslate\">value</code> 是一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.is_naive\">\n<span class=\"sig-name descname\">is_naive</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.is_naive\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>如果 <code class=\"docutils literal notranslate\">value</code> 是 naive 的，返回 <code class=\"docutils literal notranslate\">True</code>，如果是感知的，则返回 <code class=\"docutils literal notranslate\">False</code>。本函数假设 <code class=\"docutils literal notranslate\">value</code> 是一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.make_aware\">\n<span class=\"sig-name descname\">make_aware</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">timezone<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.make_aware\"><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/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>，在 <code class=\"docutils literal notranslate\">timezone</code> 中表示与 <code class=\"docutils literal notranslate\">value</code> 相同的时间点，<code class=\"docutils literal notranslate\">value</code> 是一个 naive 的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>。如果 <code class=\"docutils literal notranslate\">timezone</code> 设置为 <code class=\"docutils literal notranslate\">None</code>，则默认为 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.make_naive\">\n<span class=\"sig-name descname\">make_naive</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">timezone<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.make_naive\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回一个 naive 的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>，它在 <code class=\"docutils literal notranslate\">timezone</code> 中表示与 <code class=\"docutils literal notranslate\">value</code> 相同的时间点，<code class=\"docutils literal notranslate\">value</code> 是一个感知的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>。如果 <code class=\"docutils literal notranslate\">timezone</code> 设置为 <code class=\"docutils literal notranslate\">None</code>，则默认为 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">当前时区</span></a>。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.utils.translation\">\n<span id=\"django-utils-translation\"></span><h2><code class=\"docutils literal notranslate\">django.utils.translation</code><a class=\"heading-anchor\" href=\"#module-django.utils.translation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>关于以下用法的完整讨论，请参见 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/translation/\"><span class=\"doc\">翻译文档</span></a>。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.gettext\">\n<span class=\"sig-name descname\">gettext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">message</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.gettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>翻译 <code class=\"docutils literal notranslate\">message</code> 并以字符串形式返回。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.pgettext\">\n<span class=\"sig-name descname\">pgettext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">message</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.pgettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>翻译 <code class=\"docutils literal notranslate\">message</code> 给定的 <code class=\"docutils literal notranslate\">context</code> 并以字符串形式返回。</p>\n<p>更多信息，见 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/i18n/translation/#contextual-markers\"><span class=\"std std-ref\">上下文标记</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.gettext_lazy\">\n<span class=\"sig-name descname\">gettext_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">message</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.gettext_lazy\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.pgettext_lazy\">\n<span class=\"sig-name descname\">pgettext_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">message</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.pgettext_lazy\"><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=\"/zh-hans/6.0/topics/i18n/translation/#lazy-translations\"><span class=\"std std-ref\">惰性翻译文档</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.gettext_noop\">\n<span class=\"sig-name descname\">gettext_noop</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">message</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.gettext_noop\"><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 function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.ngettext\">\n<span class=\"sig-name descname\">ngettext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">singular</em>, <em class=\"sig-param\">plural</em>, <em class=\"sig-param\">number</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ngettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>翻译 <code class=\"docutils literal notranslate\">singular</code> 和 <code class=\"docutils literal notranslate\">plural</code>，并根据 <code class=\"docutils literal notranslate\">number</code> 返回相应的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.npgettext\">\n<span class=\"sig-name descname\">npgettext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">singular</em>, <em class=\"sig-param\">plural</em>, <em class=\"sig-param\">number</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.npgettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>翻译 <code class=\"docutils literal notranslate\">singular</code> 和 <code class=\"docutils literal notranslate\">plural</code>，并根据 <code class=\"docutils literal notranslate\">number</code> 和 <code class=\"docutils literal notranslate\">context</code> 返回适当的字符串。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.ngettext_lazy\">\n<span class=\"sig-name descname\">ngettext_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">singular</em>, <em class=\"sig-param\">plural</em>, <em class=\"sig-param\">number</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ngettext_lazy\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.npgettext_lazy\">\n<span class=\"sig-name descname\">npgettext_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">singular</em>, <em class=\"sig-param\">plural</em>, <em class=\"sig-param\">number</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.npgettext_lazy\"><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=\"/zh-hans/6.0/topics/i18n/translation/#lazy-translations\"><span class=\"std std-ref\">惰性翻译文档</span></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.activate\">\n<span class=\"sig-name descname\">activate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">language</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.activate\"><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 function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.deactivate\">\n<span class=\"sig-name descname\">deactivate</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.deactivate\"><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 function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.deactivate_all\">\n<span class=\"sig-name descname\">deactivate_all</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.deactivate_all\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>使活动翻译对象成为 <code class=\"docutils literal notranslate\">NullTranslations()</code> 实例。当我们出于某种原因想让延迟翻译以原始字符串的形式出现时，这很有用。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.override\">\n<span class=\"sig-name descname\">override</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">language</em>, <em class=\"sig-param\">deactivate<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.override\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个 Python 上下文管理器，它使用 <a class=\"reference internal\" href=\"#django.utils.translation.activate\" title=\"django.utils.translation.activate\"><code class=\"xref py py-func docutils literal notranslate\">django.utils.translation.activate()</code></a> 获取给定语言的翻译对象，将其激活为当前线程的翻译对象，并在退出时重新激活之前的活动语言。如果 <code class=\"docutils literal notranslate\">deactivate</code> 参数为 <code class=\"docutils literal notranslate\">True</code>，则可以用 <a class=\"reference internal\" href=\"#django.utils.translation.deactivate\" title=\"django.utils.translation.deactivate\"><code class=\"xref py py-func docutils literal notranslate\">django.utils.translation.deactivate()</code></a> 在退出时停用临时翻译对象。如果传递 <code class=\"docutils literal notranslate\">None</code> 作为语言参数，则会在上下文中激活 <code class=\"docutils literal notranslate\">NullTranslations()</code> 实例。</p>\n<p><code class=\"docutils literal notranslate\">override</code> 也可作为函数装饰器使用。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.check_for_language\">\n<span class=\"sig-name descname\">check_for_language</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">lang_code</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.check_for_language\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>检查是否有给定语言代码的全局语言文件（如 'fr'、'pt_BR'）。这用于决定用户提供的语言是否可用。</p>\n<p><code class=\"docutils literal notranslate\">lang_code</code> has a maximum accepted length of 500 characters. <code class=\"docutils literal notranslate\">False</code>\nis returned if it exceeds this limit, before any language-file lookup.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.get_language\">\n<span class=\"sig-name descname\">get_language</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.get_language\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the currently selected language code. Returns <code class=\"docutils literal notranslate\">None</code> if\ntranslations are temporarily deactivated (by <a class=\"reference internal\" href=\"#django.utils.translation.deactivate_all\" title=\"django.utils.translation.deactivate_all\"><code class=\"xref py py-func docutils literal notranslate\">deactivate_all()</code></a> or\nwhen <code class=\"docutils literal notranslate\">None</code> is passed to <a class=\"reference internal\" href=\"#django.utils.translation.override\" title=\"django.utils.translation.override\"><code class=\"xref py py-func docutils literal notranslate\">override()</code></a>).</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.get_language_bidi\">\n<span class=\"sig-name descname\">get_language_bidi</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.get_language_bidi\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回所选语言的 BiDi 布局。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">False</code> = 从左到右布局</p></li>\n<li><p><code class=\"docutils literal notranslate\">True</code> = 从右到左布局</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.get_language_from_request\">\n<span class=\"sig-name descname\">get_language_from_request</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">check_path<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.get_language_from_request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>分析请求，找出用户希望系统显示的语言。只考虑 settings.LANGUAGES 中列出的语言。如果用户请求的是我们有主语言的子语言，我们会发送主语言。</p>\n<p>如果 <code class=\"docutils literal notranslate\">check_path</code> 为 <code class=\"docutils literal notranslate\">True</code>，则函数首先检查请求的 URL 的路径是否以 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a> 配置中列出的语言代码开头。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.get_supported_language_variant\">\n<span class=\"sig-name descname\">get_supported_language_variant</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">lang_code</em>, <em class=\"sig-param\">strict<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.get_supported_language_variant\"><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/6.0/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a> 配置中，则返回 <code class=\"docutils literal notranslate\">lang_code</code>，可能会选择一个更通用的变量。例如，如果 <code class=\"docutils literal notranslate\">lang_code</code> 是 <code class=\"docutils literal notranslate\">'es-ar'</code>，并且 <code class=\"docutils literal notranslate\">'es'</code> 在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a> 中，但 <code class=\"docutils literal notranslate\">'es-ar'</code> 没有，则返回 <code class=\"docutils literal notranslate\">'es'</code>。</p>\n<p><code class=\"docutils literal notranslate\">lang_code</code> 的最大接受长度为 500 个字符。如果 <code class=\"docutils literal notranslate\">lang_code</code> 超过此限制且 <code class=\"docutils literal notranslate\">strict</code> 为 <code class=\"docutils literal notranslate\">True</code>，或者如果没有通用变体且 <code class=\"docutils literal notranslate\">strict</code> 为 <code class=\"docutils literal notranslate\">False</code>，则会引发 <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">LookupError</code></a>。</p>\n<p>如果 <code class=\"docutils literal notranslate\">strict</code> 是 <code class=\"docutils literal notranslate\">False</code> （默认），当语言代码和通用变体都没有找到时，可能会返回一个特定国家的变体。例如，如果 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a> 中只有 <code class=\"docutils literal notranslate\">'es-co'</code>，那么就会返回 <code class=\"docutils literal notranslate\">lang_code</code>，如 <code class=\"docutils literal notranslate\">'es'</code> 和 <code class=\"docutils literal notranslate\">'es-ar'</code>。如果 <code class=\"docutils literal notranslate\">strict=True</code>，则不会返回这些匹配。</p>\n<p>如果没有找到任何东西，会引发 <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">LookupError</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.to_locale\">\n<span class=\"sig-name descname\">to_locale</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">language</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.to_locale\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将语言名称（en-us）转换为 locale 名称（en_US）。</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.templatize\">\n<span class=\"sig-name descname\">templatize</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">src</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.templatize\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将 Django 模板转化为能被 <code class=\"docutils literal notranslate\">xgettext</code> 理解的东西。它通过将 Django 翻译标签翻译成标准的 <code class=\"docutils literal notranslate\">gettext</code> 函数调用来实现。</p>\n</dd></dl>\n\n</section>","rootId":"module-django.utils","toc":[{"title":"django.utils.cache","anchor":"module-django.utils.cache","children":[]},{"title":"django.utils.dateparse","anchor":"module-django.utils.dateparse","children":[]},{"title":"django.utils.decorators","anchor":"module-django.utils.decorators","children":[]},{"title":"django.utils.encoding","anchor":"module-django.utils.encoding","children":[]},{"title":"django.utils.feedgenerator","anchor":"module-django.utils.feedgenerator","children":[{"title":"样式表","anchor":"stylesheet","children":[]},{"title":"SyndicationFeed","anchor":"syndicationfeed","children":[]},{"title":"Enclosure","anchor":"enclosure","children":[]},{"title":"RssFeed","anchor":"rssfeed","children":[]},{"title":"Rss201rev2Feed","anchor":"rss201rev2feed","children":[]},{"title":"RssUserland091Feed","anchor":"rssuserland091feed","children":[]},{"title":"Atom1Feed","anchor":"atom1feed","children":[]}]},{"title":"django.utils.functional","anchor":"module-django.utils.functional","children":[]},{"title":"django.utils.html","anchor":"module-django.utils.html","children":[]},{"title":"django.utils.http","anchor":"module-django.utils.http","children":[]},{"title":"django.utils.module_loading","anchor":"module-django.utils.module_loading","children":[]},{"title":"django.utils.safestring","anchor":"module-django.utils.safestring","children":[]},{"title":"django.utils.text","anchor":"module-django.utils.text","children":[]},{"title":"django.utils.timezone","anchor":"module-django.utils.timezone","children":[]},{"title":"django.utils.translation","anchor":"module-django.utils.translation","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.0/ref/"}],"prev":{"docname":"ref/urls","title":"URLconfs 中使用的 django.urls 函数","url":"/zh-hans/6.0/ref/urls/"},"next":{"docname":"ref/validators","title":"验证器","url":"/zh-hans/6.0/ref/validators/"},"formats":{"html":"/zh-hans/6.0/ref/utils/","markdown":"/zh-hans/6.0/ref/utils.md","json":"/zh-hans/6.0/ref/utils.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/utils.txt","official":"https://docs.djangoproject.com/zh-hans/6.0/ref/utils/","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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}