{"title":"django.urls 实用函数","version":"3.1","locale":"zh-hans","docname":"ref/urlresolvers","url":"/zh-hans/3.1/ref/urlresolvers/","canonical":"https://djangodocs.dev/zh-hans/3.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\"><span class=\"pre\">django.urls</span></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/3.1/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">url</span></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\"><span class=\"pre\">reverse</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">viewname</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">urlconf</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\">args</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\">kwargs</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\">current_app</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.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\"><span class=\"pre\">viewname</span></code> 可以是一个 <a class=\"reference internal\" href=\"/zh-hans/3.1/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">URL 模式名称</span></a> 或者是可调用的视图对象。例如，给定以下 <code class=\"docutils literal notranslate\"><span class=\"pre\">url</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">news</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;archive/&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">archive</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;news-archive&#39;</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>\n<span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news-archive&#39;</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=\"w\"> </span><span class=\"nn\">news</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n<span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">archive</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>如果 URL 接受参数，你可以在 <code class=\"docutils literal notranslate\"><span class=\"pre\">args</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">myview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;arch-summary&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><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\"><span class=\"pre\">kwargs</span></code> 代替 <code class=\"docutils literal notranslate\"><span class=\"pre\">args</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin:app_list&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;auth&#39;</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\"><span class=\"pre\">args</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> 不能同时传递给 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code>。</p>\n<p>如果不能匹配，<code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> 会引发一个 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/exceptions/#django.urls.NoReverseMatch\" title=\"django.urls.NoReverseMatch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NoReverseMatch</span></code></a> 异常。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> 函数可以反查 URL 的多种正则表达式模式，但不是每一种可能的模式。目前主要的限制是，模式不能包含使用竖条（<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;|&quot;</span></code>）字符的替代选择。你可以很高兴地使用这样的模式与传入的 URL 进行匹配，并将它们发送给视图，但你不能反查这样的模式。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> 参数允许你向解析器提供一个提示，说明当前执行的视图属于哪个应用程序。这个 <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> 参数被用作提示，以便根据 <a class=\"reference internal\" href=\"/zh-hans/3.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\"><span class=\"pre\">urlconf</span></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\"><span class=\"pre\">reverse()</span></code> 返回的字符串已经是 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/unicode/#uri-and-iri-handling\"><span class=\"std std-ref\">url 转义的</span></a>。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;cities&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;Orléans&#39;</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\"><span class=\"pre\">reverse()</span></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\"><span class=\"pre\">urllib.parse.quote()</span></code></a>）可能会产生不理想的结果。</p>\n</aside>\n</section>\n<section id=\"reverse-lazy\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_lazy()</span></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\"><span class=\"pre\">reverse_lazy</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">viewname</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">urlconf</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\">args</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\">kwargs</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\">current_app</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.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\"><span class=\"pre\">url</span></code> 属性。</p></li>\n<li><p>为装饰器提供一个反查的 URL（例如 <a class=\"reference internal\" href=\"/zh-hans/3.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\"><span class=\"pre\">django.contrib.auth.decorators.permission_required()</span></code></a> 装饰器的 <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code> 参数）。</p></li>\n<li><p>提供一个反查的 URL 作为函数签名中参数的默认值。</p></li>\n</ul>\n</section>\n<section id=\"resolve\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">resolve()</span></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\"><span class=\"pre\">resolve()</span></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\"><span class=\"pre\">resolve</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">urlconf</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.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\"><span class=\"pre\">path</span></code> 是你要解析的 URL 路径。与 <a class=\"reference internal\" href=\"#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> 一样，你不需要担心 <code class=\"docutils literal notranslate\"><span class=\"pre\">urlconf</span></code> 参数。该函数返回一个 <a class=\"reference internal\" href=\"#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ResolverMatch</span></code></a> 对象，允许你访问关于解析 URL 的各种元数据。</p>\n<p>如果 URL 没有解析，函数会引发一个 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/exceptions/#django.urls.Resolver404\" title=\"django.urls.Resolver404\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Resolver404</span></code></a> 异常（<a class=\"reference internal\" href=\"/zh-hans/3.1/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Http404</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ResolverMatch</span></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\"><span class=\"pre\">func</span></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\"><span class=\"pre\">args</span></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\"><span class=\"pre\">kwargs</span></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>从 URL 中解析出的可能传递给视图函数的关键字参数。</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\"><span class=\"pre\">url_name</span></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\"><span class=\"pre\">route</span></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\"><span class=\"pre\">path('users/&lt;id&gt;/',</span> <span class=\"pre\">...)``是匹配的模式，``route</span></code> 将包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'users/&lt;id&gt;/'</span></code>。</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\"><span class=\"pre\">app_name</span></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\"><span class=\"pre\">app_names</span></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\"><span class=\"pre\">app_name</span></code> 是 <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo:bar'</span></code>，那么 <code class=\"docutils literal notranslate\"><span class=\"pre\">app_names</span></code> 将是 <code class=\"docutils literal notranslate\"><span class=\"pre\">['foo',</span> <span class=\"pre\">'bar']</span></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\"><span class=\"pre\">namespace</span></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\"><span class=\"pre\">namespaces</span></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\"><span class=\"pre\">foo:bar</span></code>，那么命名空间将是 <code class=\"docutils literal notranslate\"><span class=\"pre\">['foo'，'bar']</span></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\"><span class=\"pre\">view_name</span></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\"><span class=\"pre\">ResolverMatch</span></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>\n<span class=\"n\">match</span> <span class=\"o\">=</span> <span class=\"n\">resolve</span><span class=\"p\">(</span><span class=\"s1\">&#39;/some/path/&#39;</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><span class=\"n\">match</span><span class=\"o\">.</span><span class=\"n\">url_name</span><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\"><span class=\"pre\">ResolverMatch</span></code></a> 对象也可以解包为以下三个：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"n\">resolve</span><span class=\"p\">(</span><span class=\"s1\">&#39;/some/path/&#39;</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\"><span class=\"pre\">resolve()</span></code></a> 的一个可能的用法是测试一个视图在重定向到它之前是否会引发 <code class=\"docutils literal notranslate\"><span class=\"pre\">Http404</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">urllib.parse</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">urlparse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">resolve</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseRedirect</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">myview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"nb\">next</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">META</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;HTTP_REFERER&#39;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"s1\">&#39;/&#39;</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponseRedirect</span><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    <span class=\"n\">view</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"n\">resolve</span><span class=\"p\">(</span><span class=\"n\">urlparse</span><span class=\"p\">(</span><span class=\"nb\">next</span><span class=\"p\">)[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n    <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;request&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">request</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Http404</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;/&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n</section>\n<section id=\"get-script-prefix\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">get_script_prefix()</span></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\"><span class=\"pre\">get_script_prefix</span></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\"><span class=\"pre\">reverse()</span></code></a> 来定义应用程序中的 URL。然而，如果你的应用程序自己构造了部分 URL 层次结构，你可能偶尔需要生成 URL。在这种情况下，你需要能够在 Web 服务器中找到 Django 项目的基本 URL（通常，<a class=\"reference internal\" href=\"#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> 会帮你处理这个问题）。在这种情况下，你可以调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_script_prefix()</span></code>，它将返回 Django 项目的 URL 的脚本前缀部分。如果你的 Django 项目是在 web 服务器的根目录下，那么它总是 <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;/&quot;</span></code>。</p>\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/3.1/ref/"}],"prev":{"docname":"ref/unicode","title":"Unicode 数据","url":"/zh-hans/3.1/ref/unicode/"},"next":{"docname":"ref/urls","title":"URLconfs 中使用的 django.urls 函数","url":"/zh-hans/3.1/ref/urls/"},"formats":{"html":"/zh-hans/3.1/ref/urlresolvers/","markdown":"/zh-hans/3.1/ref/urlresolvers.md","json":"/zh-hans/3.1/ref/urlresolvers.json"},"source":"https://github.com/django/django/blob/stable/3.1.x/docs/ref/urlresolvers.txt","official":"https://docs.djangoproject.com/zh-hans/3.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","pt-br","ko","es","el","pl"]}