{"title":"django.urls 实用函数","version":"5.1","locale":"zh-hans","docname":"ref/urlresolvers","url":"/zh-hans/5.1/ref/urlresolvers/","canonical":"https://djangodocs.dev/zh-hans/5.1/ref/urlresolvers/","summary":"reverse() Link to this heading # 如果你需要在你的代码中使用类似于 url 模板标签的东西，Django 提供了以下函数： reverse ( viewname , urlconf = None , args = None , kwargs = None , current_app = None…","html":"<span id=\"django-urls-utility-functions\"></span><h1><code class=\"docutils literal notranslate\">django.urls</code> 实用函数<a class=\"heading-anchor\" href=\"#module-django.urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"reverse\">\n<h2>reverse()<a class=\"heading-anchor\" href=\"#reverse\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>如果你需要在你的代码中使用类似于 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\">url</code></a> 模板标签的东西，Django 提供了以下函数：</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.urls.reverse\">\n<span class=\"sig-name descname\">reverse</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">viewname</em>, <em class=\"sig-param\">urlconf<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">args<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">kwargs<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">current_app<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.urls.reverse\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">viewname</code> 可以是一个 <a class=\"reference internal\" href=\"/zh-hans/5.1/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">URL 模式名称</span></a> 或者是可调用的视图对象。例如，给定以下 <code class=\"docutils literal notranslate\">url</code>：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">news</span> <span class=\"kn\">import</span> views\n\npath<span class=\"p\">(</span><span class=\"s2\">&quot;archive/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>archive<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;news-archive&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>你可以使用以下任何一种方式来反查 URL：</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\"># using the named URL</span>\nreverse<span class=\"p\">(</span><span class=\"s2\">&quot;news-archive&quot;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># passing a callable object</span>\n<span class=\"c1\"># (This is discouraged because you can&#39;t reverse namespaced views this way.)</span>\n<span class=\"kn\">from</span> <span class=\"nn\">news</span> <span class=\"kn\">import</span> views\n\nreverse<span class=\"p\">(</span>views<span class=\"o\">.</span>archive<span class=\"p\">)</span>\n</code></pre></div>\n<p>如果 URL 接受参数，你可以在 <code class=\"docutils literal notranslate\">args</code> 中传递参数。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> reverse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">myview</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span>reverse<span class=\"p\">(</span><span class=\"s2\">&quot;arch-summary&quot;</span><span class=\"p\">,</span> args<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1945</span><span class=\"p\">]))</span>\n</code></pre></div>\n<p>你也可以传递 <code class=\"docutils literal notranslate\">kwargs</code> 而不是 <code class=\"docutils literal notranslate\">args</code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>reverse<span class=\"p\">(</span><span class=\"s2\">&quot;admin:app_list&quot;</span><span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;auth&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&#39;/admin/auth/&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">args</code> 和 <code class=\"docutils literal notranslate\">kwargs</code> 不能同时传递给 <code class=\"docutils literal notranslate\">reverse()</code>。</p>\n<p>如果不能匹配，<code class=\"docutils literal notranslate\">reverse()</code> 会引发一个 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/exceptions/#django.urls.NoReverseMatch\" title=\"django.urls.NoReverseMatch\"><code class=\"xref py py-class docutils literal notranslate\">NoReverseMatch</code></a> 异常。</p>\n<p><code class=\"docutils literal notranslate\">reverse()</code> 函数可以反查 URL 的多种正则表达式模式，但不是每一种可能的模式。目前主要的限制是，模式不能包含使用竖条（<code class=\"docutils literal notranslate\">&quot;|&quot;</code>）字符的替代选择。你可以很高兴地使用这样的模式与传入的 URL 进行匹配，并将它们发送给视图，但你不能反查这样的模式。</p>\n<p><code class=\"docutils literal notranslate\">current_app</code> 参数允许你向解析器提供一个提示，说明当前执行的视图属于哪个应用程序。这个 <code class=\"docutils literal notranslate\">current_app</code> 参数被用作提示，以便根据 <a class=\"reference internal\" href=\"/zh-hans/5.1/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">命名空间的 URL 解析策略</span></a>，将应用程序名称空间解析为特定应用程序实例上的 URL。</p>\n<p><code class=\"docutils literal notranslate\">urlconf</code> 参数是 URLconf 模块，其中包含用于反查的 URL 模式。默认情况下，使用的是当前线程的根 URLconf。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p><code class=\"docutils literal notranslate\">reverse()</code> 返回的字符串已经被 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/unicode/#uri-and-iri-handling\"><span class=\"std std-ref\">urlquoted</span></a>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>reverse<span class=\"p\">(</span><span class=\"s2\">&quot;cities&quot;</span><span class=\"p\">,</span> args<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;Orléans&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&#39;.../Orl%C3%A9ans/&#39;</span>\n</code></pre></div>\n<p>对 <code class=\"docutils literal notranslate\">reverse()</code> 的输出应用进一步的编码（如 <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">urllib.parse.quote()</code></a>）可能会产生不理想的结果。</p>\n</aside>\n</section>\n<section id=\"reverse-lazy\">\n<h2><code class=\"docutils literal notranslate\">reverse_lazy()</code><a class=\"heading-anchor\" href=\"#reverse-lazy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#reverse\">reverse()</a> 的惰性执行版本。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.urls.reverse_lazy\">\n<span class=\"sig-name descname\">reverse_lazy</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">viewname</em>, <em class=\"sig-param\">urlconf<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">args<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">kwargs<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">current_app<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.urls.reverse_lazy\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当你需要在你的项目的 URLConf 被加载之前使用 URL 反查时，这个功能很有用。一些常见的需要使用该功能的情况是：</p>\n<ul class=\"simple\">\n<li><p>提供一个反查的 URL 作为基于类的通用视图的 <code class=\"docutils literal notranslate\">url</code> 属性。</p></li>\n<li><p>为装饰器提供一个反查的 URL（例如 <a class=\"reference internal\" href=\"/zh-hans/5.1/topics/auth/default/#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.decorators.permission_required()</code></a> 装饰器的 <code class=\"docutils literal notranslate\">login_url</code> 参数）。</p></li>\n<li><p>提供一个反查的 URL 作为函数签名中参数的默认值。</p></li>\n</ul>\n</section>\n<section id=\"resolve\">\n<h2><code class=\"docutils literal notranslate\">resolve()</code><a class=\"heading-anchor\" href=\"#resolve\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\">resolve()</code> 函数可用于解析到相应视图函数的 URL 路径。该函数的签名如下：</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.urls.resolve\">\n<span class=\"sig-name descname\">resolve</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em>, <em class=\"sig-param\">urlconf<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.urls.resolve\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">path</code> 是你要解析的 URL 路径。与 <a class=\"reference internal\" href=\"#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> 一样，你不需要担心 <code class=\"docutils literal notranslate\">urlconf</code> 参数。该函数返回一个 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\">ResolverMatch</code></a> 对象，允许你访问关于解析 URL 的各种元数据。</p>\n<p>如果 URL 没有解析，函数会引发一个 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/exceptions/#django.urls.Resolver404\" title=\"django.urls.Resolver404\"><code class=\"xref py py-exc docutils literal notranslate\">Resolver404</code></a> 异常（<a class=\"reference internal\" href=\"/zh-hans/5.1/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\">Http404</code></a> 的一个子类）。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ResolverMatch</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.func\">\n<span class=\"sig-name descname\">func</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.func\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>用于服务 URL 的视图函数。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.args\">\n<span class=\"sig-name descname\">args</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.args\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>从 URL 中解析出的传递给视图函数的参数。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.kwargs\">\n<span class=\"sig-name descname\">kwargs</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.kwargs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>所有将传递给视图函数的关键字参数，即 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch.captured_kwargs\" title=\"django.urls.ResolverMatch.captured_kwargs\"><code class=\"xref py py-attr docutils literal notranslate\">captured_kwargs</code></a> 和 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch.extra_kwargs\" title=\"django.urls.ResolverMatch.extra_kwargs\"><code class=\"xref py py-attr docutils literal notranslate\">extra_kwargs</code></a>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.captured_kwargs\">\n<span class=\"sig-name descname\">captured_kwargs</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.captured_kwargs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>从 URL 解析出的将传递给视图函数的捕获关键字参数。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.extra_kwargs\">\n<span class=\"sig-name descname\">extra_kwargs</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.extra_kwargs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>将传递给视图函数的额外关键字参数。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.url_name\">\n<span class=\"sig-name descname\">url_name</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.url_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与 URL 匹配的 URL 模式的名称。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.route\">\n<span class=\"sig-name descname\">route</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.route\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 模式的路径。</p>\n<p>例如，如果 <code class=\"docutils literal notranslate\">path('users/&lt;id&gt;/', ...)``是匹配的模式，``route</code> 将包含 <code class=\"docutils literal notranslate\">'users/&lt;id&gt;/'</code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.tried\">\n<span class=\"sig-name descname\">tried</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.tried\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在 URL 匹配一个模式或耗尽可用模式之前尝试的 URL 模式列表。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.app_name\">\n<span class=\"sig-name descname\">app_name</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.app_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 模式的应用程序命名空间。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.app_names\">\n<span class=\"sig-name descname\">app_names</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.app_names\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 模式的完整应用程序命名空间中的单个命名空间组件列表。例如，如果 <code class=\"docutils literal notranslate\">app_name</code> 是 <code class=\"docutils literal notranslate\">'foo:bar'</code>，那么 <code class=\"docutils literal notranslate\">app_names</code> 将是 <code class=\"docutils literal notranslate\">['foo', 'bar']</code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.namespace\">\n<span class=\"sig-name descname\">namespace</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.namespace\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 模式的实例命名空间。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.namespaces\">\n<span class=\"sig-name descname\">namespaces</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.namespaces\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 模式的完整实例命名空间中的单个命名空间组件列表，即，如果命名空间是 <code class=\"docutils literal notranslate\">foo:bar</code>，那么命名空间将是 <code class=\"docutils literal notranslate\">['foo'，'bar']</code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.urls.ResolverMatch.view_name\">\n<span class=\"sig-name descname\">view_name</span><a class=\"heading-anchor\" href=\"#django.urls.ResolverMatch.view_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>匹配 URL 的视图名称，包括命名空间（如果有的话）。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>然后可以查询一个 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\">ResolverMatch</code></a> 对象，以提供与 URL 相匹配的 URL 模式的信息：</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\"># Resolve a URL</span>\nmatch <span class=\"o\">=</span> resolve<span class=\"p\">(</span><span class=\"s2\">&quot;/some/path/&quot;</span><span class=\"p\">)</span>\n<span class=\"c1\"># Print the URL pattern that matches the URL</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span>match<span class=\"o\">.</span>url_name<span class=\"p\">)</span>\n</code></pre></div>\n<p>一个 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\">ResolverMatch</code></a> 对象也可以解包为以下三个：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>func<span class=\"p\">,</span> args<span class=\"p\">,</span> kwargs <span class=\"o\">=</span> resolve<span class=\"p\">(</span><span class=\"s2\">&quot;/some/path/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.urls.resolve\" title=\"django.urls.resolve\"><code class=\"xref py py-func docutils literal notranslate\">resolve()</code></a> 的一个可能的用法是测试一个视图在重定向到它之前是否会引发 <code class=\"docutils literal notranslate\">Http404</code> 错误：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">urllib.parse</span> <span class=\"kn\">import</span> urlparse\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> resolve\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> Http404<span class=\"p\">,</span> HttpResponseRedirect\n\n\n<span class=\"k\">def</span> <span class=\"nf\">myview</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"nb\">next</span> <span class=\"o\">=</span> request<span class=\"o\">.</span>META<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;HTTP_REFERER&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;/&quot;</span>\n    response <span class=\"o\">=</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"nb\">next</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># modify the request and response as required, e.g. change locale</span>\n    <span class=\"c1\"># and set corresponding locale cookie</span>\n\n    view<span class=\"p\">,</span> args<span class=\"p\">,</span> kwargs <span class=\"o\">=</span> resolve<span class=\"p\">(</span>urlparse<span class=\"p\">(</span><span class=\"nb\">next</span><span class=\"p\">)[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n    kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;request&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> request\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        view<span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n    <span class=\"k\">except</span> Http404<span class=\"p\">:</span>\n        <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> response\n</code></pre></div>\n</section>\n<section id=\"get-script-prefix\">\n<h2><code class=\"docutils literal notranslate\">get_script_prefix()</code><a class=\"heading-anchor\" href=\"#get-script-prefix\"><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.urls.get_script_prefix\">\n<span class=\"sig-name descname\">get_script_prefix</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.urls.get_script_prefix\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>通常，你应该始终使用 <a class=\"reference internal\" href=\"#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> 来定义应用程序中的 URL。然而，如果你的应用程序自己构建了 URL 层次结构的一部分，偶尔可能需要生成 URL。在这种情况下，你需要能够找到 Django 项目在其 Web 服务器内的基本 URL（通常，<a class=\"reference internal\" href=\"#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> 会为你处理这个）。在这种情况下，你可以调用 <code class=\"docutils literal notranslate\">get_script_prefix()</code>，它将返回你的 Django 项目的 URL 的脚本前缀部分。如果你的 Django 项目位于其 Web 服务器的根目录，这将始终是 <code class=\"docutils literal notranslate\">&quot;/&quot;</code>。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>此函数 <strong>不能</strong> 在请求-响应周期之外使用，因为它依赖于在该周期期间初始化的值。</p>\n</aside>\n</section>","rootId":"module-django.urls","toc":[{"title":"reverse()","anchor":"reverse","children":[]},{"title":"reverse_lazy()","anchor":"reverse-lazy","children":[]},{"title":"resolve()","anchor":"resolve","children":[]},{"title":"get_script_prefix()","anchor":"get-script-prefix","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/5.1/ref/"}],"prev":{"docname":"ref/unicode","title":"Unicode 数据","url":"/zh-hans/5.1/ref/unicode/"},"next":{"docname":"ref/urls","title":"URLconfs 中使用的 django.urls 函数","url":"/zh-hans/5.1/ref/urls/"},"formats":{"html":"/zh-hans/5.1/ref/urlresolvers/","markdown":"/zh-hans/5.1/ref/urlresolvers.md","json":"/zh-hans/5.1/ref/urlresolvers.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/urlresolvers.txt","official":"https://docs.djangoproject.com/zh-hans/5.1/ref/urlresolvers/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}