{"title":"Django Utils","version":"2.1","locale":"ko","docname":"ref/utils","url":"/ko/2.1/ref/utils/","canonical":"https://djangodocs.dev/ko/2.1/ref/utils/","summary":"This document covers all stable modules in django.utils . Most of the modules in django.utils are designed for internal use and only the following parts can be…","html":"<span id=\"django-utils\"></span><h1>Django Utils<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>This document covers all stable modules in <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils</span></code>. Most of the\nmodules in <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils</span></code> are designed for internal use and only the\nfollowing parts can be considered stable and thus backwards compatible as per\nthe <a class=\"reference internal\" href=\"/ko/2.1/internals/release-process/#internal-release-deprecation-policy\"><span class=\"std std-ref\">internal release deprecation policy</span></a>.</p>\n<section id=\"module-django.utils.cache\">\n<span id=\"django-utils-cache\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.cache</span></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>This module contains helper functions for controlling HTTP caching. It does so\nby managing the <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> header of responses. It includes functions to patch\nthe header of response objects directly and decorators that change functions to\ndo that header-patching themselves.</p>\n<p>For information on the <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> header, see <span class=\"target\" id=\"index-0\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc7231.html#section-7.1.4\"><strong>RFC 7231 Section 7.1.4</strong></a>.</p>\n<p>Essentially, the <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> HTTP header defines which headers a cache should take\ninto account when building its cache key. Requests with the same path but\ndifferent header content for headers named in <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> need to get different\ncache keys to prevent delivery of wrong content.</p>\n<p>For example, <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/\"><span class=\"doc\">internationalization</span></a> middleware would\nneed to distinguish caches by the <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-language</span></code> header.</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\"><span class=\"pre\">patch_cache_control</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>This function patches the <code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control</span></code> header by adding all keyword\narguments to it. The transformation is as follows:</p>\n<ul class=\"simple\">\n<li><p>All keyword parameter names are turned to lowercase, and underscores\nare converted to hyphens.</p></li>\n<li><p>If the value of a parameter is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (exactly <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, not just a\ntrue value), only the parameter name is added to the header.</p></li>\n<li><p>All other parameters are added with their value, after applying\n<code class=\"docutils literal notranslate\"><span class=\"pre\">str()</span></code> to it.</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\"><span class=\"pre\">get_max_age</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></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>Returns the max-age from the response Cache-Control header as an integer\n(or <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> if it wasn’t found or wasn’t an integer).</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\"><span class=\"pre\">patch_response_headers</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">cache_timeout</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.patch_response_headers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Adds some useful headers to the given <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code> object:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Expires</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control</span></code></p></li>\n</ul>\n<p>Each header is only added if it isn’t already set.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">cache_timeout</span></code> is in seconds. The <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-CACHE_MIDDLEWARE_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHE_MIDDLEWARE_SECONDS</span></code></a>\nsetting is used by default.</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\"><span class=\"pre\">add_never_cache_headers</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></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>Adds a <code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control:</span> <span class=\"pre\">max-age=0,</span> <span class=\"pre\">no-cache,</span> <span class=\"pre\">no-store,</span> <span class=\"pre\">must-revalidate</span></code>\nheader to a response to indicate that a page should never be cached.</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\"><span class=\"pre\">patch_vary_headers</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">newheaders</span></span></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>Adds (or updates) the <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> header in the given <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code> object.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">newheaders</span></code> is a list of header names that should be in <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code>.\nExisting headers in <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> aren’t removed.</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\"><span class=\"pre\">get_cache_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.get_cache_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a cache key based on the request path. It can be used in the\nrequest phase because it pulls the list of headers to take into account\nfrom the global path registry and uses those to build a cache key to\ncheck against.</p>\n<p>If there is no headerlist stored, the page needs to be rebuilt, so this\nfunction returns <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">learn_cache_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">cache_timeout</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.cache.learn_cache_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Learns what headers to take into account for some request path from the\nresponse object. It stores those headers in a global path registry so that\nlater access to that path will know what headers to take into account\nwithout building the response object itself. The headers are named in\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> header of the response, but we want to prevent response\ngeneration.</p>\n<p>The list of headers to use for cache key generation is stored in the same\ncache as the pages themselves. If the cache ages some data out of the\ncache, this just means that we have to build the response once to get at\nthe Vary header and so at the list of headers to use for the cache key.</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\"><span class=\"pre\">django.utils.dateparse</span></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>The functions defined in this module share the following properties:</p>\n<ul class=\"simple\">\n<li><p>They accept strings in ISO 8601 date/time formats (or some close\nalternatives) and return objects from the corresponding classes in Python’s\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#module-datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> module.</p></li>\n<li><p>They raise <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(Python v3.14에서)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> if their input is well formatted but isn’t a\nvalid date or time.</p></li>\n<li><p>They return <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> if it isn’t well formatted at all.</p></li>\n<li><p>They accept up to picosecond resolution in input, but they truncate it to\nmicroseconds, since that’s what Python supports.</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\"><span class=\"pre\">parse_date</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Parses a string and returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.date</span></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\"><span class=\"pre\">parse_time</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Parses a string and returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.time\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.time</span></code></a>.</p>\n<p>UTC offsets aren’t supported; if <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> describes one, the result is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">parse_datetime</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Parses a string and returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code></a>.</p>\n<p>UTC offsets are supported; if <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> describes one, the result’s\n<code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> attribute is a <a class=\"reference internal\" href=\"#django.utils.timezone.FixedOffset\" title=\"django.utils.timezone.FixedOffset\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FixedOffset</span></code></a>\ninstance.</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\"><span class=\"pre\">parse_duration</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Parses a string and returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.timedelta</span></code></a>.</p>\n<p>Expects data in the format <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;DD</span> <span class=\"pre\">HH:MM:SS.uuuuuu&quot;</span></code> or as specified by ISO\n8601 (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">P4DT1H15M20S</span></code> which is equivalent to <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span> <span class=\"pre\">1:15:20</span></code>) or\nPostgreSQL’s day-time interval format (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span> <span class=\"pre\">days</span> <span class=\"pre\">04:05:06</span></code>).</p>\n<aside class=\"version-note version-changed\" data-version=\"2.0\">\n<p class=\"version-note-title\">Changed in Django 2.0</p><p>Support for PostgreSQL’s interval format was added.</p>\n</aside>\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\"><span class=\"pre\">django.utils.decorators</span></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\"><span class=\"pre\">method_decorator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">decorator</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></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>Converts a function decorator into a method decorator. It can be used to\ndecorate methods or classes; in the latter case, <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> is the name\nof the method to be decorated and is required.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">decorator</span></code> may also be a list or tuple of functions. They are wrapped\nin reverse order so that the call order is the order in which the functions\nappear in the list/tuple.</p>\n<p>See <a class=\"reference internal\" href=\"/ko/2.1/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">decorating class based views</span></a> for\nexample usage.</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\"><span class=\"pre\">decorator_from_middleware</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">middleware_class</span></span></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>Given a middleware class, returns a view decorator. This lets you use\nmiddleware functionality on a per-view basis. The middleware is created\nwith no params passed.</p>\n<p>It assumes middleware that’s compatible with the old style of Django 1.9\nand earlier (having methods like <code class=\"docutils literal notranslate\"><span class=\"pre\">process_request()</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">process_exception()</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">process_response()</span></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\"><span class=\"pre\">decorator_from_middleware_with_args</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">middleware_class</span></span></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>Like <code class=\"docutils literal notranslate\"><span class=\"pre\">decorator_from_middleware</span></code>, but returns a function\nthat accepts the arguments to be passed to the middleware_class.\nFor example, the <a class=\"reference internal\" href=\"/ko/2.1/topics/cache/#django.views.decorators.cache.cache_page\" title=\"django.views.decorators.cache.cache_page\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">cache_page()</span></code></a>\ndecorator is created from the <code class=\"docutils literal notranslate\"><span class=\"pre\">CacheMiddleware</span></code> like this:</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=\"n\">cache_page</span> <span class=\"o\">=</span> <span class=\"n\">decorator_from_middleware_with_args</span><span class=\"p\">(</span><span class=\"n\">CacheMiddleware</span><span class=\"p\">)</span>\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=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\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\"><span class=\"pre\">django.utils.encoding</span></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.python_2_unicode_compatible\">\n<span class=\"sig-name descname\"><span class=\"pre\">python_2_unicode_compatible</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.python_2_unicode_compatible\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A decorator that defines <code class=\"docutils literal notranslate\"><span class=\"pre\">__unicode__</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__</span></code> methods under\nPython 2. Under Python 3 it does nothing.</p>\n<p>To support Python 2 and 3 with a single code base, define a <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__</span></code>\nmethod returning text (use <code class=\"docutils literal notranslate\"><span class=\"pre\">six.text_type()</span></code> if you’re doing some\ncasting) and apply this decorator to the class.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.smart_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">smart_text</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.smart_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> object representing arbitrary object <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code>. Treats\nbytestrings using the <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> codec.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, don’t convert (some) non-string-like\nobjects.</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\"><span class=\"pre\">is_protected_type</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></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>Determine if the object instance is of a protected type.</p>\n<p>Objects of protected types are preserved as-is when passed to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">force_text(strings_only=True)</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.force_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">force_text</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.encoding.force_text\"><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\"><span class=\"pre\">smart_text</span></code>, except that lazy instances are resolved to\nstrings, rather than kept as lazy objects.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, don’t convert (some) non-string-like\nobjects.</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\"><span class=\"pre\">smart_bytes</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></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>Returns a bytestring version of arbitrary object <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code>, encoded as\nspecified in <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code>.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, don’t convert (some) non-string-like\nobjects.</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\"><span class=\"pre\">force_bytes</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></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>Similar to <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_bytes</span></code>, except that lazy instances are resolved to\nbytestrings, rather than kept as lazy objects.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, don’t convert (some) non-string-like\nobjects.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.encoding.smart_str\">\n<span class=\"sig-name descname\"><span class=\"pre\">smart_str</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></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>Alias of <a class=\"reference internal\" href=\"#django.utils.encoding.smart_text\" title=\"django.utils.encoding.smart_text\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">smart_text()</span></code></a>. This function returns a <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> or a lazy\nstring.</p>\n<p>For instance, this is suitable for writing to <a class=\"reference external\" href=\"https://docs.python.org/3/library/sys.html#sys.stdout\" title=\"(Python v3.14에서)\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">sys.stdout</span></code></a>.</p>\n<p>Alias of <a class=\"reference internal\" href=\"#django.utils.encoding.smart_bytes\" title=\"django.utils.encoding.smart_bytes\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">smart_bytes()</span></code></a> on Python 2 (in older versions of Django that\nsupport it).</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\"><span class=\"pre\">force_str</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'utf-8'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strings_only</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'strict'</span></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>Alias of <a class=\"reference internal\" href=\"#django.utils.encoding.force_text\" title=\"django.utils.encoding.force_text\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">force_text()</span></code></a>. This function always returns a <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>.</p>\n<p>Alias of <a class=\"reference internal\" href=\"#django.utils.encoding.force_bytes\" title=\"django.utils.encoding.force_bytes\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">force_bytes()</span></code></a> on Python 2 (in older versions of Django that\nsupport it).</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\"><span class=\"pre\">iri_to_uri</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">iri</span></span></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>Convert an Internationalized Resource Identifier (IRI) portion to a URI\nportion that is suitable for inclusion in a URL.</p>\n<p>This is the algorithm from section 3.1 of <span class=\"target\" id=\"index-1\"></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>, slightly\nsimplified since the input is assumed to be a string rather than an\narbitrary byte stream.</p>\n<p>Takes an IRI (string or UTF-8 bytes) and returns a string containing the\nencoded result.</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\"><span class=\"pre\">uri_to_iri</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">uri</span></span></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>Converts a Uniform Resource Identifier into an Internationalized Resource\nIdentifier.</p>\n<p>This is an algorithm from section 3.2 of <span class=\"target\" id=\"index-2\"></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>.</p>\n<p>Takes a URI in ASCII bytes and returns a string containing the encoded\nresult.</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\"><span class=\"pre\">filepath_to_uri</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></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>Convert a file system path to a URI portion that is suitable for inclusion\nin a URL. The path is assumed to be either UTF-8 bytes or string.</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\"><span class=\"pre\">encodeURIComponent()</span></code> JavaScript function for more details.</p>\n<p>Returns an ASCII string containing the encoded result.</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\"><span class=\"pre\">escape_uri_path</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></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>Escapes the unsafe characters from the path portion of a Uniform Resource\nIdentifier (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\"><span class=\"pre\">django.utils.feedgenerator</span></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>Sample usage:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">feedgenerator</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">feed</span> <span class=\"o\">=</span> <span class=\"n\">feedgenerator</span><span class=\"o\">.</span><span class=\"n\">Rss201rev2Feed</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Poynter E-Media Tidbits&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">link</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://www.poynter.org/column.asp?id=31&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">description</span><span class=\"o\">=</span><span class=\"s2\">&quot;A group Weblog by the sharpest minds in online media/journalism/publishing.&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">language</span><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><span class=\"n\">feed</span><span class=\"o\">.</span><span class=\"n\">add_item</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">link</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://www.holovaty.com/test/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">description</span><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=\"s1\">&#39;test.rss&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fp</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">feed</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">fp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For simplifying the selection of a generator use <code class=\"docutils literal notranslate\"><span class=\"pre\">feedgenerator.DefaultFeed</span></code>\nwhich is currently <code class=\"docutils literal notranslate\"><span class=\"pre\">Rss201rev2Feed</span></code></p>\n<p>For definitions of the different versions of RSS, see:\n<a class=\"reference external\" href=\"https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss\">https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss</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\"><span class=\"pre\">get_tag_uri</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">url</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">date</span></span></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>Creates a 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\">https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id</a></p>\n</dd></dl>\n\n<section id=\"syndicationfeed\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SyndicationFeed</span></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>Base class for all syndication feeds. Subclasses should provide 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\"><span class=\"pre\">__init__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">title</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">link</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">description</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">language</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_email</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_link</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">subtitle</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">categories</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">feed_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">feed_copyright</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">feed_guid</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ttl</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>Initialize the feed with the given dictionary of metadata, which applies\nto the entire feed.</p>\n<p>Any extra keyword arguments you pass to <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> will be stored in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">self.feed</span></code>.</p>\n<p>All parameters should be strings, except <code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code>, which should\nbe a sequence of strings.</p>\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\"><span class=\"pre\">add_item</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">title</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">link</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">description</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_email</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">author_link</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">pubdate</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">comments</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unique_id</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">categories</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">item_copyright</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ttl</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">updateddate</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">enclosures</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>Adds an item to the feed. All args are expected to be strings except\n<code class=\"docutils literal notranslate\"><span class=\"pre\">pubdate</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">updateddate</span></code>, which are <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code>\nobjects, and <code class=\"docutils literal notranslate\"><span class=\"pre\">enclosures</span></code>, which is a list of <code class=\"docutils literal notranslate\"><span class=\"pre\">Enclosure</span></code> instances.</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\"><span class=\"pre\">num_items</span></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\"><span class=\"pre\">root_attributes</span></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>Return extra attributes to place on the root (i.e. feed/channel)\nelement. Called from <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></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\"><span class=\"pre\">add_root_elements</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">handler</span></span></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>Add elements in the root (i.e. feed/channel) element.\nCalled from <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></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\"><span class=\"pre\">item_attributes</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">item</span></span></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>Return extra attributes to place on each item (i.e. item/entry)\nelement.</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\"><span class=\"pre\">add_item_elements</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">handler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">item</span></span></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>Add elements on each item (i.e. item/entry) element.</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\"><span class=\"pre\">write</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">outfile</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span></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>Outputs the feed in the given encoding to <code class=\"docutils literal notranslate\"><span class=\"pre\">outfile</span></code>, which is a\nfile-like object. Subclasses should override this.</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\"><span class=\"pre\">writeString</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span></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>Returns the feed in the given encoding as a string.</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\"><span class=\"pre\">latest_post_date</span></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>Returns the latest <code class=\"docutils literal notranslate\"><span class=\"pre\">pubdate</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">updateddate</span></code> for all items in the\nfeed. If no items have either of these attributes this returns the\ncurrent UTC date/time.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"enclosure\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Enclosure</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Enclosure</span></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>Represents an RSS enclosure</p>\n</dd></dl>\n\n</section>\n<section id=\"rssfeed\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">RssFeed</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RssFeed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">SyndicationFeed</span></span></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\"><span class=\"pre\">Rss201rev2Feed</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Rss201rev2Feed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">RssFeed</span></span></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>Spec: <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\"><span class=\"pre\">RssUserland091Feed</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RssUserland091Feed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">RssFeed</span></span></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>Spec: <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\"><span class=\"pre\">Atom1Feed</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Atom1Feed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">SyndicationFeed</span></span></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>Spec: <a class=\"reference external\" href=\"https://tools.ietf.org/html/rfc4287\">https://tools.ietf.org/html/rfc4287</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\"><span class=\"pre\">django.utils.functional</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">cached_property</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.functional.cached_property\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;cached_property</span></code> decorator caches the result of a method with a\nsingle <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> argument as a property. The cached result will persist\nas long as the instance does, so if the instance is passed around and the\nfunction subsequently invoked, the cached result will be returned.</p>\n<p>Consider a typical case, where a view might need to call a model’s method\nto perform some computation, before placing the model instance into the\ncontext, where the template might invoke the method once more:</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=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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> <span class=\"n\">friends</span>\n\n<span class=\"c1\"># in the view:</span>\n<span class=\"k\">if</span> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>And in the template you would have:</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>Here, <code class=\"docutils literal notranslate\"><span class=\"pre\">friends()</span></code> will be called twice. Since the instance <code class=\"docutils literal notranslate\"><span class=\"pre\">person</span></code> in\nthe view and the template are the same, decorating the <code class=\"docutils literal notranslate\"><span class=\"pre\">friends()</span></code> method\nwith <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;cached_property</span></code> can avoid that:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.functional</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">cached_property</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">friends</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Note that as the method is now a property, in Python code it will need to\nbe accessed appropriately:</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> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span><span class=\"p\">:</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>The cached value can be treated like an ordinary attribute of the instance:</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>\n<span class=\"k\">del</span> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span> <span class=\"c1\"># or delattr(person, &quot;friends&quot;)</span>\n\n<span class=\"c1\"># set a value manually, that will persist on the instance until cleared</span>\n<span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span> <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>As well as offering potential performance advantages, <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;cached_property</span></code>\ncan ensure that an attribute’s value does not change unexpectedly over the\nlife of an instance. This could occur with a method whose computation is\nbased on <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.now()</span></code>, or simply if a change were saved to the\ndatabase by some other process in the brief interval between subsequent\ninvocations of a method on the same instance.</p>\n<p>You can use the <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> argument to make cached properties of other\nmethods. For example, if you had an expensive <code class=\"docutils literal notranslate\"><span class=\"pre\">get_friends()</span></code> method and\nwanted to allow calling it without retrieving the cached value, you could\nwrite:</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=\"n\">friends</span> <span class=\"o\">=</span> <span class=\"n\">cached_property</span><span class=\"p\">(</span><span class=\"n\">get_friends</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;friends&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>While <code class=\"docutils literal notranslate\"><span class=\"pre\">person.get_friends()</span></code> will recompute the friends on each call, the\nvalue of the cached property will persist until you delete it as described\nabove:</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=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span>         <span class=\"c1\"># calls first time</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">get_friends</span><span class=\"p\">()</span>   <span class=\"c1\"># calls again</span>\n<span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">friends</span>         <span class=\"c1\"># does not call</span>\n<span class=\"n\">x</span> <span class=\"ow\">is</span> <span class=\"n\">z</span>                     <span class=\"c1\"># is True</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">경고</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">cached_property</span></code> doesn’t work properly with a <a class=\"reference external\" href=\"https://docs.python.org/faq/programming.html#i-try-to-use-spam-and-i-get-an-error-about-someclassname-spam\">mangled</a> name unless\nit’s passed a <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> of the form <code class=\"docutils literal notranslate\"><span class=\"pre\">_Class__attribute</span></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=\"n\">__friends</span> <span class=\"o\">=</span> <span class=\"n\">cached_property</span><span class=\"p\">(</span><span class=\"n\">get_friends</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;_Person__friends&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\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\"><span class=\"pre\">keep_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">resultclasses</span></span></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 offers many utility functions (particularly in <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils</span></code>)\nthat take a string as their first argument and do something to that string.\nThese functions are used by template filters as well as directly in other\ncode.</p>\n<p>If you write your own similar functions and deal with translations, you’ll\nface the problem of what to do when the first argument is a lazy\ntranslation object. You don’t want to convert it to a string immediately,\nbecause you might be using this function outside of a view (and hence the\ncurrent thread’s locale setting will not be correct).</p>\n<p>For cases like this, use the <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.functional.keep_lazy()</span></code>\ndecorator. It modifies the function so that <em>if</em> it’s called with a lazy\ntranslation as one of its arguments, the function evaluation is delayed\nuntil it needs to be converted to a string.</p>\n<p>For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.functional</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">keep_lazy</span><span class=\"p\">,</span> <span class=\"n\">keep_lazy_text</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Do some conversion on string &#39;s&#39;</span>\n    <span class=\"o\">...</span>\n<span class=\"n\">fancy_utility_function</span> <span class=\"o\">=</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)(</span><span class=\"n\">fancy_utility_function</span><span class=\"p\">)</span>\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=\"w\"> </span><span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">keep_lazy()</span></code> decorator takes a number of extra arguments (<code class=\"docutils literal notranslate\"><span class=\"pre\">*args</span></code>)\nspecifying the type(s) that the original function can return. A common\nuse case is to have functions that return text. For these, you can just\npass the <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> type to <code class=\"docutils literal notranslate\"><span class=\"pre\">keep_lazy</span></code> (or even simpler, use the\n<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\"><span class=\"pre\">keep_lazy_text()</span></code></a> decorator described in the next section).</p>\n<p>Using this decorator means you can write your function and assume that the\ninput is a proper string, then add support for lazy translation objects at\nthe end.</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\"><span class=\"pre\">keep_lazy_text</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></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>A shortcut for <code class=\"docutils literal notranslate\"><span class=\"pre\">keep_lazy(str)(func)</span></code>.</p>\n<p>If you have a function that returns text and you want to be able to take\nlazy arguments while delaying their evaluation, simply use this decorator:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.functional</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">keep_lazy</span><span class=\"p\">,</span> <span class=\"n\">keep_lazy_text</span>\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=\"w\"> </span><span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\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=\"w\"> </span><span class=\"nf\">fancy_utility_function</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">):</span>\n    <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\"><span class=\"pre\">django.utils.html</span></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>Usually you should build up HTML using Django’s templates to make use of its\nautoescape mechanism, using the utilities in <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\"><span class=\"pre\">django.utils.safestring</span></code></a>\nwhere appropriate. This module provides some additional low level utilities for\nescaping 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\"><span class=\"pre\">escape</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></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>Returns the given text with ampersands, quotes and angle brackets encoded\nfor use in HTML. The input is first coerced to a string and the output has\n<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\"><span class=\"pre\">mark_safe()</span></code></a> applied.</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\"><span class=\"pre\">conditional_escape</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></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\"><span class=\"pre\">escape()</span></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\"><span class=\"pre\">format_html</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format_string</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>This is similar to <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(Python v3.14에서)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a>, except that it is appropriate for\nbuilding up HTML fragments. All args and kwargs are passed through\n<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\"><span class=\"pre\">conditional_escape()</span></code></a> before being passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">str.format()</span></code>.</p>\n<p>For the case of building up small HTML fragments, this function is to be\npreferred over string interpolation using <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">str.format()</span></code>\ndirectly, because it applies escaping to all arguments - just like the\ntemplate system applies escaping by default.</p>\n<p>So, instead of writing:</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=\"n\">mark_safe</span><span class=\"p\">(</span><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> <span class=\"o\">%</span> <span class=\"p\">(</span>\n    <span class=\"n\">some_html</span><span class=\"p\">,</span>\n    <span class=\"n\">escape</span><span class=\"p\">(</span><span class=\"n\">some_text</span><span class=\"p\">),</span>\n    <span class=\"n\">escape</span><span class=\"p\">(</span><span class=\"n\">some_other_text</span><span class=\"p\">),</span>\n<span class=\"p\">))</span>\n</code></pre></div>\n<p>You should instead use:</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=\"n\">format_html</span><span class=\"p\">(</span><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    <span class=\"n\">mark_safe</span><span class=\"p\">(</span><span class=\"n\">some_html</span><span class=\"p\">),</span>\n    <span class=\"n\">some_text</span><span class=\"p\">,</span>\n    <span class=\"n\">some_other_text</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>This has the advantage that you don’t need to apply <a class=\"reference internal\" href=\"#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">escape()</span></code></a> to each\nargument and risk a bug and an XSS vulnerability if you forget one.</p>\n<p>Note that although this function uses <code class=\"docutils literal notranslate\"><span class=\"pre\">str.format()</span></code> to do the\ninterpolation, some of the formatting options provided by <code class=\"docutils literal notranslate\"><span class=\"pre\">str.format()</span></code>\n(e.g. number formatting) will not work, since all arguments are passed\nthrough <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\"><span class=\"pre\">conditional_escape()</span></code></a> which (ultimately) calls\n<a class=\"reference internal\" href=\"#django.utils.encoding.force_text\" title=\"django.utils.encoding.force_text\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">force_text()</span></code></a> on the values.</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\"><span class=\"pre\">format_html_join</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sep</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format_string</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">args_generator</span></span></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 wrapper of <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\"><span class=\"pre\">format_html()</span></code></a>, for the common case of a group of\narguments that need to be formatted using the same format string, and then\njoined using <code class=\"docutils literal notranslate\"><span class=\"pre\">sep</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">sep</span></code> is also passed through\n<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\"><span class=\"pre\">conditional_escape()</span></code></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">args_generator</span></code> should be an iterator that returns the sequence of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code> that will be passed to <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\"><span class=\"pre\">format_html()</span></code></a>. For example:</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=\"n\">format_html_join</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <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><span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">u</span> <span class=\"ow\">in</span> <span class=\"n\">users</span><span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\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\"><span class=\"pre\">strip_tags</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Tries to remove anything that looks like an HTML tag from the string, that\nis anything contained within <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;&gt;</span></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\"><span class=\"pre\">strip_tag</span></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\"><span class=\"pre\">escape()</span></code></a>.</p>\n<p>For example:</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=\"n\">strip_tags</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&lt;b&gt;Joel&lt;/b&gt;</span> <span class=\"pre\">&lt;button&gt;is&lt;/button&gt;</span> <span class=\"pre\">a</span> <span class=\"pre\">&lt;span&gt;slug&lt;/span&gt;&quot;</span></code>\nthe return value will be <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Joel</span> <span class=\"pre\">is</span> <span class=\"pre\">a</span> <span class=\"pre\">slug&quot;</span></code>.</p>\n<p>If you are looking for a more robust solution, take a look at the <a class=\"reference external\" href=\"https://pypi.org/project/bleach/\">bleach</a> Python library.</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\"><span class=\"pre\">html_safe</span></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>The <code class=\"docutils literal notranslate\"><span class=\"pre\">__html__()</span></code> method on a class helps non-Django templates detect\nclasses whose output doesn’t require HTML escaping.</p>\n<p>This decorator defines the <code class=\"docutils literal notranslate\"><span class=\"pre\">__html__()</span></code> method on the decorated class\nby wrapping <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__()</span></code> in <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\"><span class=\"pre\">mark_safe()</span></code></a>.\nEnsure the <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__()</span></code> method does indeed return text that doesn’t\nrequire HTML escaping.</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\"><span class=\"pre\">django.utils.http</span></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\"><span class=\"pre\">urlencode</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">doseq</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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>A version of Python’s <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode\" title=\"(Python v3.14에서)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">urllib.parse.urlencode()</span></code></a> function that can\noperate on <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiValueDict</span></code> and non-string values.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.http.cookie_date\">\n<span class=\"sig-name descname\"><span class=\"pre\">cookie_date</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">epoch_seconds</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.cookie_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"2.1\">\n<p class=\"version-note-title\">Deprecated since Django 2.1</p><p><span class=\"versionmodified deprecated\">버전 2.1부터 폐지됨: </span>Use <a class=\"reference internal\" href=\"#django.utils.http.http_date\" title=\"django.utils.http.http_date\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">http_date()</span></code></a> instead, which follows the latest RFC.</p>\n</aside>\n<p>Formats the time to ensure compatibility with Netscape’s cookie standard.</p>\n<p>Accepts a floating point number expressed in seconds since the epoch in\nUTC–such as that outputted by <code class=\"docutils literal notranslate\"><span class=\"pre\">time.time()</span></code>. If set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>,\ndefaults to the current time.</p>\n<p>Outputs a string in the format <code class=\"docutils literal notranslate\"><span class=\"pre\">Wdy,</span> <span class=\"pre\">DD-Mon-YYYY</span> <span class=\"pre\">HH:MM:SS</span> <span class=\"pre\">GMT</span></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\"><span class=\"pre\">http_date</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">epoch_seconds</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.http.http_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Formats the time to match the <span class=\"target\" id=\"index-3\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc1123.html\"><strong>RFC 1123</strong></a> date format as specified by HTTP\n<span class=\"target\" id=\"index-4\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc7231.html#section-7.1.1.1\"><strong>RFC 7231 Section 7.1.1.1</strong></a>.</p>\n<p>Accepts a floating point number expressed in seconds since the epoch in\nUTC–such as that outputted by <code class=\"docutils literal notranslate\"><span class=\"pre\">time.time()</span></code>. If set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>,\ndefaults to the current time.</p>\n<p>Outputs a string in the format <code class=\"docutils literal notranslate\"><span class=\"pre\">Wdy,</span> <span class=\"pre\">DD</span> <span class=\"pre\">Mon</span> <span class=\"pre\">YYYY</span> <span class=\"pre\">HH:MM:SS</span> <span class=\"pre\">GMT</span></code>.</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\"><span class=\"pre\">base36_to_int</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></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>Converts a base 36 string to an integer.</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\"><span class=\"pre\">int_to_base36</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">i</span></span></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>Converts a positive integer to a base 36 string.</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\"><span class=\"pre\">urlsafe_base64_encode</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></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>Encodes a bytestring in base64 for use in URLs, stripping any trailing\nequal signs.</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\"><span class=\"pre\">urlsafe_base64_decode</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></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>Decodes a base64 encoded string, adding back any trailing equal signs that\nmight have been stripped.</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\"><span class=\"pre\">django.utils.module_loading</span></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>Functions for working with Python modules.</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\"><span class=\"pre\">import_string</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">dotted_path</span></span></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>Imports a dotted module path and returns the attribute/class designated by\nthe last name in the path. Raises <code class=\"docutils literal notranslate\"><span class=\"pre\">ImportError</span></code> if the import failed. For\nexample:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.module_loading</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">import_string</span>\n<span class=\"n\">ValidationError</span> <span class=\"o\">=</span> <span class=\"n\">import_string</span><span class=\"p\">(</span><span class=\"s1\">&#39;django.core.exceptions.ValidationError&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>is equivalent to:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ValidationError</span>\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\"><span class=\"pre\">django.utils.safestring</span></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>Functions and classes for working with “safe strings”: strings that can be\ndisplayed safely without further escaping in HTML. Marking something as a “safe\nstring” means that the producer of the string has already turned characters\nthat should not be interpreted by the HTML engine (e.g. ‘&lt;’) into the\nappropriate entities.</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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SafeString</span></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>A <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> subclass that has been specifically marked as “safe”\n(requires no further escaping) for HTML output purposes. Alias of\n<a class=\"reference internal\" href=\"#django.utils.safestring.SafeText\" title=\"django.utils.safestring.SafeText\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SafeText</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.safestring.SafeText\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SafeText</span></span><a class=\"heading-anchor\" href=\"#django.utils.safestring.SafeText\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> subclass that has been specifically marked as “safe” for HTML\noutput purposes.</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\"><span class=\"pre\">mark_safe</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">s</span></span></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>Explicitly mark a string as safe for (HTML) output purposes. The returned\nobject can be used everywhere a string is appropriate.</p>\n<p>Can be called multiple times on a single string.</p>\n<p>Can also be used as a decorator.</p>\n<p>For building up fragments of HTML, you should normally be using\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\"><span class=\"pre\">django.utils.html.format_html()</span></code></a> instead.</p>\n<p>String marked safe will become unsafe again if modified. For example:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mystr</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;b&gt;Hello World&lt;/b&gt;   &#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mystr</span> <span class=\"o\">=</span> <span class=\"n\">mark_safe</span><span class=\"p\">(</span><span class=\"n\">mystr</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">mystr</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;class &#39;django.utils.safestring.SafeText&#39;&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mystr</span> <span class=\"o\">=</span> <span class=\"n\">mystr</span><span class=\"o\">.</span><span class=\"n\">strip</span><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><span class=\"n\">mystr</span><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\"><span class=\"pre\">django.utils.text</span></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\"><span class=\"pre\">format_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format_string</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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 version of <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(Python v3.14에서)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> for when <code class=\"docutils literal notranslate\"><span class=\"pre\">format_string</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code>,\nand/or <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> contain lazy objects. The first argument is the string to\nbe formatted. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.text</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">format_lazy</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pgettext_lazy</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"n\">format_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">{person}</span><span class=\"s1\">/&lt;int:pk&gt;/&#39;</span><span class=\"p\">,</span> <span class=\"n\">person</span><span class=\"o\">=</span><span class=\"n\">pgettext_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;URL&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;person&#39;</span><span class=\"p\">)),</span>\n         <span class=\"n\">PersonDetailView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>This example allows translators to translate part of the URL. If “person”\nis translated to “persona”, the regular expression will match\n<code class=\"docutils literal notranslate\"><span class=\"pre\">persona/(?P&lt;pk&gt;\\d+)/$</span></code>, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">persona/5/</span></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\"><span class=\"pre\">slugify</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_unicode</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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>Converts a string to a URL slug by:</p>\n<ol class=\"arabic simple\">\n<li><p>Converting to ASCII if <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_unicode</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> (the default).</p></li>\n<li><p>Removing characters that aren’t alphanumerics, underscores, hyphens, or\nwhitespace.</p></li>\n<li><p>Removing leading and trailing whitespace.</p></li>\n<li><p>Converting to lowercase.</p></li>\n<li><p>Replacing any whitespace or repeated dashes with single dashes.</p></li>\n</ol>\n<p>For example:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">slugify</span><span class=\"p\">(</span><span class=\"s1\">&#39; Joel is a slug &#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;joel-is-a-slug&#39;</span>\n</code></pre></div>\n<p>If you want to allow Unicode characters, pass <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_unicode=True</span></code>. For\nexample:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">slugify</span><span class=\"p\">(</span><span class=\"s1\">&#39;你好 World&#39;</span><span class=\"p\">,</span> <span class=\"n\">allow_unicode</span><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\"><span class=\"pre\">django.utils.timezone</span></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 data\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.utc\">\n<span class=\"sig-name descname\"><span class=\"pre\">utc</span></span><a class=\"heading-anchor\" href=\"#django.utils.timezone.utc\"><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=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> instance that represents UTC.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.timezone.FixedOffset\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FixedOffset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">offset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.FixedOffset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> subclass modeling a fixed offset from UTC.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">offset</span></code> is an integer number of minutes east of UTC.</p>\n</dd></dl>\n\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\"><span class=\"pre\">get_fixed_timezone</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">offset</span></span></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>Returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> instance that represents a time zone\nwith a fixed offset from UTC.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">offset</span></code> is a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.timedelta</span></code></a> or an integer number of\nminutes. Use positive values for time zones east of UTC and negative\nvalues for west of 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\"><span class=\"pre\">get_default_timezone</span></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>Returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> instance that represents the\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">default time zone</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\"><span class=\"pre\">get_default_timezone_name</span></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>Returns the name of the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">default time zone</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\"><span class=\"pre\">get_current_timezone</span></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>Returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> instance that represents the\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</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\"><span class=\"pre\">get_current_timezone_name</span></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>Returns the name of the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</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\"><span class=\"pre\">activate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span></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>Sets the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a>. The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code> argument must be an instance of a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a>\nsubclass or a time zone name.</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\"><span class=\"pre\">deactivate</span></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>Unsets the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</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\"><span class=\"pre\">override</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span></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=\"/ko/2.1/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\"><span class=\"pre\">activate()</span></code></a>, and restores\nthe previously active time zone on exit. If the <code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code> argument is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, the <a class=\"reference internal\" href=\"/ko/2.1/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\"><span class=\"pre\">deactivate()</span></code></a> instead.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">override</span></code> is also usable as a function decorator.</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\"><span class=\"pre\">localtime</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.localtime\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Converts an aware <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> to a different time zone,\nby default the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a>.</p>\n<p>When <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is omitted, it defaults to <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">now()</span></code></a>.</p>\n<p>This function doesn’t work on naive datetimes; use <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\"><span class=\"pre\">make_aware()</span></code></a>\ninstead.</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\"><span class=\"pre\">localdate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.localdate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Uses <a class=\"reference internal\" href=\"#django.utils.timezone.localtime\" title=\"django.utils.timezone.localtime\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">localtime()</span></code></a> to convert an aware <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> to a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime.date\" title=\"(Python v3.14에서)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">date()</span></code></a> in a different time zone, by default the\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a>.</p>\n<p>When <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is omitted, it defaults to <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">now()</span></code></a>.</p>\n<p>This function doesn’t work on naive datetimes.</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\"><span class=\"pre\">now</span></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>Returns a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> that represents the\ncurrent point in time. Exactly what’s returned depends on the value of\n<a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a>:</p>\n<ul class=\"simple\">\n<li><p>If <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, this will be a\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#naive-vs-aware-datetimes\"><span class=\"std std-ref\">naive</span></a> datetime (i.e. a datetime\nwithout an associated timezone) that represents the current time\nin the system’s local timezone.</p></li>\n<li><p>If <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, this will be an\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#naive-vs-aware-datetimes\"><span class=\"std std-ref\">aware</span></a> datetime representing the\ncurrent time in UTC. Note that <a class=\"reference internal\" href=\"#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">now()</span></code></a> will always return\ntimes in UTC regardless of the value of <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a>;\nyou can use <a class=\"reference internal\" href=\"#django.utils.timezone.localtime\" title=\"django.utils.timezone.localtime\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">localtime()</span></code></a> to get the time in the current time zone.</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\"><span class=\"pre\">is_aware</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is aware, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> if it is naive. This\nfunction assumes that <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></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\"><span class=\"pre\">is_naive</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is naive, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> if it is aware. This\nfunction assumes that <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></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\"><span class=\"pre\">make_aware</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">is_dst</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.make_aware\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns an aware <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> that represents the same\npoint in time as <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> in <code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> being a naive\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, it\ndefaults to the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">pytz.AmbiguousTimeError</span></code> exception is raised if you try to make\n<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> aware during a DST transition where the same time occurs twice\n(when reverting from DST). Setting <code class=\"docutils literal notranslate\"><span class=\"pre\">is_dst</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> will\navoid the exception by choosing if the time is pre-transition or\npost-transition respectively.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">pytz.NonExistentTimeError</span></code> exception is raised if you try to make\n<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> aware during a DST transition such that the time never occurred\n(when entering into DST). Setting <code class=\"docutils literal notranslate\"><span class=\"pre\">is_dst</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> will\navoid the exception by moving the hour backwards or forwards by 1\nrespectively. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">is_dst=True</span></code> would change a nonexistent\ntime of 2:30 to 1:30 and <code class=\"docutils literal notranslate\"><span class=\"pre\">is_dst=False</span></code> would change the time to 3:30.</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\"><span class=\"pre\">make_naive</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">timezone</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.timezone.make_naive\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a naive <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> that represents in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code>  the same point in time as <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> being an\naware <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(Python v3.14에서)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, it\ndefaults to the <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</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\"><span class=\"pre\">django.utils.translation</span></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>For a complete discussion on the usage of the following see the\n<a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/translation/\"><span class=\"doc\">translation documentation</span></a>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">u</span></code> prefix on the functions below comes from a difference in Python 2\nbetween unicode and bytestrings. If your code doesn’t support Python 2, use the\nfunctions without the <code class=\"docutils literal notranslate\"><span class=\"pre\">u</span></code>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.gettext\">\n<span class=\"sig-name descname\"><span class=\"pre\">gettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></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></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.ugettext\">\n<span class=\"sig-name descname\"><span class=\"pre\">ugettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ugettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Translates <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code> and returns it as a string.</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\"><span class=\"pre\">pgettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></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>Translates <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code> given the <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> and returns it as a string.</p>\n<p>For more information, see <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/translation/#contextual-markers\"><span class=\"std std-ref\">Contextual markers</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\"><span class=\"pre\">gettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></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.ugettext_lazy\">\n<span class=\"sig-name descname\"><span class=\"pre\">ugettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ugettext_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\"><span class=\"pre\">pgettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></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>Same as the non-lazy versions above, but using lazy execution.</p>\n<p>See <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/translation/#lazy-translations\"><span class=\"std std-ref\">lazy translations documentation</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\"><span class=\"pre\">gettext_noop</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></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></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.ugettext_noop\">\n<span class=\"sig-name descname\"><span class=\"pre\">ugettext_noop</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ugettext_noop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Marks strings for translation but doesn’t translate them now. This can be\nused to store strings in global variables that should stay in the base\nlanguage (because they might be used externally) and will be translated\nlater.</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\"><span class=\"pre\">ngettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></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></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.ungettext\">\n<span class=\"sig-name descname\"><span class=\"pre\">ungettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ungettext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Translates <code class=\"docutils literal notranslate\"><span class=\"pre\">singular</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">plural</span></code> and returns the appropriate string\nbased on <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></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\"><span class=\"pre\">npgettext</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></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>Translates <code class=\"docutils literal notranslate\"><span class=\"pre\">singular</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">plural</span></code> and returns the appropriate string\nbased on <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> and the <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></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\"><span class=\"pre\">ngettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></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.ungettext_lazy\">\n<span class=\"sig-name descname\"><span class=\"pre\">ungettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.ungettext_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\"><span class=\"pre\">npgettext_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">singular</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">plural</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></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>Same as the non-lazy versions above, but using lazy execution.</p>\n<p>See <a class=\"reference internal\" href=\"/ko/2.1/topics/i18n/translation/#lazy-translations\"><span class=\"std std-ref\">lazy translations documentation</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\"><span class=\"pre\">activate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">language</span></span></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>Fetches the translation object for a given language and activates it as\nthe current translation object for the current thread.</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\"><span class=\"pre\">deactivate</span></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>Deactivates the currently active translation object so that further _ calls\nwill resolve against the default translation object, again.</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\"><span class=\"pre\">deactivate_all</span></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>Makes the active translation object a <code class=\"docutils literal notranslate\"><span class=\"pre\">NullTranslations()</span></code> instance.\nThis is useful when we want delayed translations to appear as the original\nstring for some reason.</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\"><span class=\"pre\">override</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">language</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">deactivate</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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>A Python context manager that uses\n<a class=\"reference internal\" href=\"#django.utils.translation.activate\" title=\"django.utils.translation.activate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.activate()</span></code></a> to fetch the translation object\nfor a given language, activates it as the translation object for the\ncurrent thread and reactivates the previous active language on exit.\nOptionally, it can simply deactivate the temporary translation on exit with\n<a class=\"reference internal\" href=\"#django.utils.translation.deactivate\" title=\"django.utils.translation.deactivate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.deactivate()</span></code></a> if the <code class=\"docutils literal notranslate\"><span class=\"pre\">deactivate</span></code> argument\nis <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. If you pass <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> as the language argument, a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">NullTranslations()</span></code> instance is activated within the context.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">override</span></code> is also usable as a function decorator.</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\"><span class=\"pre\">check_for_language</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lang_code</span></span></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>Checks whether there is a global language file for the given language\ncode (e.g. ‘fr’, ‘pt_BR’). This is used to decide whether a user-provided\nlanguage is available.</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\"><span class=\"pre\">get_language</span></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\"><span class=\"pre\">None</span></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\"><span class=\"pre\">deactivate_all()</span></code></a> or\nwhen <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">override()</span></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\"><span class=\"pre\">get_language_bidi</span></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>Returns selected language’s BiDi layout:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> = left-to-right layout</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> = right-to-left layout</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\"><span class=\"pre\">get_language_from_request</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">check_path</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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>Analyzes the request to find what language the user wants the system to\nshow. Only languages listed in settings.LANGUAGES are taken into account.\nIf the user requests a sublanguage where we have a main language, we send\nout the main language.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">check_path</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, the function first checks the requested URL\nfor whether its path begins with a language code listed in the\n<a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> setting.</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\"><span class=\"pre\">get_supported_language_variant</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lang_code</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strict</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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><aside class=\"version-note version-added\" data-version=\"2.1\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">lang_code</span></code> if it’s in the <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> setting, possibly\nselecting a more generic variant. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">'es'</span></code> is returned if\n<code class=\"docutils literal notranslate\"><span class=\"pre\">lang_code</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">'es-ar'</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">'es'</span></code> is in <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> but\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'es-ar'</span></code> isn’t.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">strict</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> (the default), a country-specific variant may\nbe returned when neither the language code nor its generic variant is found.\nFor example, if only <code class=\"docutils literal notranslate\"><span class=\"pre\">'es-co'</span></code> is in <a class=\"reference internal\" href=\"/ko/2.1/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a>, that’s\nreturned for <code class=\"docutils literal notranslate\"><span class=\"pre\">lang_code</span></code>s like <code class=\"docutils literal notranslate\"><span class=\"pre\">'es'</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">'es-ar'</span></code>. Those matches\naren’t returned if <code class=\"docutils literal notranslate\"><span class=\"pre\">strict=True</span></code>.</p>\n<p>Raises <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(Python v3.14에서)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> if nothing is found.</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\"><span class=\"pre\">to_locale</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">language</span></span></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>Turns a language name (en-us) into a locale name (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\"><span class=\"pre\">templatize</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">src</span></span></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>Turns a Django template into something that is understood by <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code>.\nIt does so by translating the Django translation tags into standard\n<code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> function invocations.</p>\n</dd></dl>\n\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.LANGUAGE_SESSION_KEY\">\n<span class=\"sig-name descname\"><span class=\"pre\">LANGUAGE_SESSION_KEY</span></span><a class=\"heading-anchor\" href=\"#django.utils.translation.LANGUAGE_SESSION_KEY\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Session key under which the active language for the current session is\nstored.</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":"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 Reference","url":"/ko/2.1/ref/"}],"prev":{"docname":"ref/urls","title":"django.urls functions for use in URLconfs","url":"/ko/2.1/ref/urls/"},"next":{"docname":"ref/validators","title":"Validators","url":"/ko/2.1/ref/validators/"},"formats":{"html":"/ko/2.1/ref/utils/","markdown":"/ko/2.1/ref/utils.md","json":"/ko/2.1/ref/utils.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/ref/utils.txt","official":"https://docs.djangoproject.com/ko/2.1/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","1.11"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}