{"title":"django.urls 实用函数","version":"4.1","locale":"zh-hans","docname":"ref/urlresolvers","url":"/zh-hans/4.1/ref/urlresolvers/","canonical":"https://djangodocs.dev/zh-hans/4.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/4.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/4.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/4.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/4.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/4.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/4.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/4.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/4.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>All keyword arguments that would be passed to the view function, i.e.\n<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\"><span class=\"pre\">captured_kwargs</span></code></a> and\n<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\"><span class=\"pre\">extra_kwargs</span></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\"><span class=\"pre\">captured_kwargs</span></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><aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>The captured keyword arguments that would be passed to the view\nfunction, as parsed from the 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\"><span class=\"pre\">extra_kwargs</span></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><aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>The additional keyword arguments that would be passed to the view\nfunction.</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.tried\">\n<span class=\"sig-name descname\"><span class=\"pre\">tried</span></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>The list of URL patterns tried before the URL either matched one or\nexhausted available patterns.</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>Normally, you should always use <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> to define URLs\nwithin your application. However, if your application constructs part of the\nURL hierarchy itself, you may occasionally need to generate URLs. In that\ncase, you need to be able to find the base URL of the Django project within\nits web server (normally, <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> takes care of this for\nyou). In that case, you can call <code class=\"docutils literal notranslate\"><span class=\"pre\">get_script_prefix()</span></code>, which will return\nthe script prefix portion of the URL for your Django project. If your Django\nproject is at the root of its web server, this is always <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/4.1/ref/"}],"prev":{"docname":"ref/unicode","title":"Unicode 数据","url":"/zh-hans/4.1/ref/unicode/"},"next":{"docname":"ref/urls","title":"URLconfs 中使用的 django.urls 函数","url":"/zh-hans/4.1/ref/urls/"},"formats":{"html":"/zh-hans/4.1/ref/urlresolvers/","markdown":"/zh-hans/4.1/ref/urlresolvers.md","json":"/zh-hans/4.1/ref/urlresolvers.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/ref/urlresolvers.txt","official":"https://docs.djangoproject.com/zh-hans/4.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"]}