{"title":"URL-distributör","version":"6.1","locale":"sv","docname":"topics/http/urls","url":"/sv/6.1/topics/http/urls/","canonical":"https://djangodocs.dev/sv/6.1/topics/http/urls/","summary":"Ett rent och elegant URL-schema är en viktig detalj i en högkvalitativ webbapplikation.","html":"<h1>URL-distributör<a class=\"heading-anchor\" href=\"#url-dispatcher\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Ett rent och elegant URL-schema är en viktig detalj i en högkvalitativ webbapplikation. Med Django kan du designa webbadresser hur du vill, utan några begränsningar av ramverket.</p>\n<p>Se ”Cool URIs don’t change” av Tim Berners-Lee, skaparen av World Wide Web, för utmärkta argument för varför webbadresser ska vara rena och användbara.</p>\n<section id=\"overview\">\n<h2>Översikt<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att utforma webbadresser för en app skapar du en Python-modul som informellt kallas <strong>URLconf</strong> (URL-konfiguration). Den här modulen är ren Python-kod och är en mappning mellan URL-sökvägsuttryck till Python-funktioner (dina vyer).</p>\n<p>Denna mappning kan vara så kort eller så lång som behövs. Den kan referera till andra mappningar. Och eftersom det är ren Python-kod kan den konstrueras dynamiskt.</p>\n<p>Django tillhandahåller också ett sätt att översätta webbadresser enligt det aktiva språket. Se <a class=\"reference internal\" href=\"/sv/6.1/topics/i18n/translation/#url-internationalization\"><span class=\"std std-ref\">internationaliseringsdokumentation</span></a> för mer information.</p>\n</section>\n<section id=\"how-django-processes-a-request\">\n<span id=\"id1\"></span><h2>Hur Django behandlar en förfrågan<a class=\"heading-anchor\" href=\"#how-django-processes-a-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När en användare begär en sida från din Django-drivna webbplats är detta den algoritm som systemet följer för att avgöra vilken Python-kod som ska köras:</p>\n<ol class=\"arabic simple\">\n<li><p>Django bestämmer vilken URLconf-modul som ska användas. Vanligtvis är detta värdet på <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\">ROOT_URLCONF</code></a>-inställningen, men om det inkommande <code class=\"docutils literal notranslate\">HttpRequest</code>-objektet har ett <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.urlconf\" title=\"django.http.HttpRequest.urlconf\"><code class=\"xref py py-attr docutils literal notranslate\">urlconf</code></a>-attribut (inställt av middleware), kommer dess värde att användas i stället för <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\">ROOT_URLCONF</code></a>-inställningen.</p></li>\n<li><p>Django laddar den Python-modulen och letar efter variabeln <code class=\"docutils literal notranslate\">urlpatterns</code>. Detta bör vara en <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> av <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">django.urls.path()</code></a> och/eller <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">django.urls.re_path()</code></a> instanser.</p></li>\n<li><p>Django går igenom varje URL-mönster, i ordning, och stannar vid det första som matchar den begärda URL:en och matchar mot <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.path_info\" title=\"django.http.HttpRequest.path_info\"><code class=\"xref py py-attr docutils literal notranslate\">path_info</code></a>.</p></li>\n<li><p>När ett av URL-mönstren matchar importerar och anropar Django den angivna vyn, som är en Python-funktion (eller en <a class=\"reference internal\" href=\"/sv/6.1/topics/class-based-views/\"><span class=\"doc\">klassbaserad vy</span></a>). Vyn får följande argument:</p>\n<ul class=\"simple\">\n<li><p>En instans av <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>.</p></li>\n<li><p>Om det matchade URL-mönstret inte innehåller några namngivna grupper anges matchningarna från det reguljära uttrycket som positionsargument.</p></li>\n<li><p>Nyckelordsargumenten består av alla namngivna delar som matchas av sökvägsuttrycket som tillhandahålls, åsidosatta av alla argument som anges i det valfria <code class=\"docutils literal notranslate\">kwargs</code>-argumentet till <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">django.urls.path()</code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">django.urls.re_path()</code></a>.</p></li>\n</ul>\n</li>\n<li><p>Om inget URL-mönster matchar, eller om ett undantag uppstår under någon punkt i denna process, anropar Django en lämplig felhanteringsvy. Se <a class=\"reference internal\" href=\"#error-handling\">Felhantering</a> nedan.</p></li>\n</ol>\n</section>\n<section id=\"example\">\n<h2>Exempel<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Här är ett exempel på URLconf:</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> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>special_case_2003<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>month_archive<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&lt;slug:slug&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>article_detail<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Anteckningar:</p>\n<ul class=\"simple\">\n<li><p>Använd vinkelparenteser för att fånga ett värde från URL:en.</p></li>\n<li><p>Fångade värden kan eventuellt innehålla en konverteringstyp. Använd t.ex. <code class=\"docutils literal notranslate\">&lt;int:name&gt;</code> för att fånga en heltalsparameter. Om en omvandlare inte ingår matchas alla strängar, exklusive tecknet <code class=\"docutils literal notranslate\">/</code>.</p></li>\n<li><p>Det finns inget behov av att lägga till ett inledande snedstreck, eftersom alla webbadresser har det. Till exempel är det <code class=\"docutils literal notranslate\">artiklar</code>, inte <code class=\"docutils literal notranslate\">/artiklar</code>.</p></li>\n</ul>\n<p>Exempel på förfrågningar:</p>\n<ul class=\"simple\">\n<li><p>En förfrågan till <code class=\"docutils literal notranslate\">/articles/2005/03/</code> skulle matcha den tredje posten i listan. Django skulle anropa funktionen <code class=\"docutils literal notranslate\">views.month_archive(request, year=2005, month=3)</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">/articles/2003/</code> skulle matcha det första mönstret i listan, inte det andra, eftersom mönstren testas i ordning och det första är det första testet som ska godkännas. Känn dig fri att utnyttja beställningen för att infoga specialfall som detta. Här skulle Django anropa funktionen <code class=\"docutils literal notranslate\">views.special_case_2003(request)</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">/articles/2003</code> skulle inte matcha något av dessa mönster, eftersom varje mönster kräver att URL:en slutar med ett snedstreck.</p></li>\n<li><p><code class=\"docutils literal notranslate\">/articles/2003/03/building-a-django-site/</code> skulle matcha det slutliga mönstret. Django skulle anropa funktionen <code class=\"docutils literal notranslate\">views.article_detail(request, year=2003, month=3, slug=&quot;building-a-django-site&quot;)</code>.</p></li>\n</ul>\n</section>\n<section id=\"path-converters\">\n<h2>Banomvandlare<a class=\"heading-anchor\" href=\"#path-converters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Följande sökvägskonverterare är tillgängliga som standard:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">str</code> - Matchar alla icke-tomma strängar, exklusive sökvägsseparatorn <code class=\"docutils literal notranslate\">'/'</code>. Detta är standardvärdet om en konverterare inte ingår i uttrycket.</p></li>\n<li><p><code class=\"docutils literal notranslate\">int</code> - Motsvarar noll eller ett positivt heltal. Returnerar ett <code class=\"docutils literal notranslate\">int</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">slug</code> - Matchar alla slug-strängar som består av ASCII-bokstäver eller siffror, plus bindestreck och understreck. Till exempel <code class=\"docutils literal notranslate\">bygg-din-1:a-django-sida</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">uuid</code> - Matchar ett formaterat UUID. För att förhindra att flera webbadresser mappas till samma sida måste bindestreck inkluderas och bokstäver måste vara gemener. Till exempel <code class=\"docutils literal notranslate\">075194d3-6885-417e-a8a8-6c931e272f00</code>. Returnerar en <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a>-instans.</p></li>\n<li><p><code class=\"docutils literal notranslate\">path</code> - Matchar alla icke-tomma strängar, inklusive sökvägsseparatorn <code class=\"docutils literal notranslate\">'/'</code>. Detta gör att du kan matcha mot en komplett URL-sökväg snarare än ett segment av en URL-sökväg som med <code class=\"docutils literal notranslate\">str</code>.</p></li>\n</ul>\n</section>\n<section id=\"registering-custom-path-converters\">\n<span id=\"id2\"></span><h2>Registrering av anpassade sökvägsomvandlare<a class=\"heading-anchor\" href=\"#registering-custom-path-converters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För mer komplexa matchningskrav kan du definiera dina egna banomvandlare.</p>\n<p>En converter är en klass som innehåller följande:</p>\n<ul class=\"simple\">\n<li><p>Ett <code class=\"docutils literal notranslate\">regex</code>-klassattribut, som en sträng.</p></li>\n<li><p>En <code class=\"docutils literal notranslate\">to_python(self, value)</code>-metod, som hanterar konvertering av den matchade strängen till den typ som ska skickas till vyfunktionen. Den bör ge upphov till <code class=\"docutils literal notranslate\">ValueError</code> om den inte kan konvertera det givna värdet. Ett <code class=\"docutils literal notranslate\">ValueError</code> tolkas som ingen matchning och som en konsekvens av detta skickas ett 404-svar till användaren om inte ett annat URL-mönster matchar.</p></li>\n<li><p>En <code class=\"docutils literal notranslate\">to_url(self, value)</code>-metod, som hanterar konvertering av Python-typen till en sträng som ska användas i URL:en. Den bör ge upphov till <code class=\"docutils literal notranslate\">ValueError</code> om den inte kan konvertera det givna värdet. Ett <code class=\"docutils literal notranslate\">ValueError</code> tolkas som ingen matchning och som en konsekvens av detta kommer <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> att ge <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.urls.NoReverseMatch\" title=\"django.urls.NoReverseMatch\"><code class=\"xref py py-class docutils literal notranslate\">NoReverseMatch</code></a> om inte ett annat URL-mönster matchar.</p></li>\n</ul>\n<p>Till exempel:</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=\"k\">class</span> <span class=\"nc\">FourDigitYearConverter</span><span class=\"p\">:</span>\n    regex <span class=\"o\">=</span> <span class=\"s2\">&quot;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">to_python</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> value<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">int</span><span class=\"p\">(</span>value<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">to_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> value<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%04d</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> value\n</code></pre></div>\n<p>Registrera anpassade omvandlarklasser i din URLconf med <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.register_converter\" title=\"django.urls.register_converter\"><code class=\"xref py py-func docutils literal notranslate\">register_converter()</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=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path<span class=\"p\">,</span> register_converter\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> converters<span class=\"p\">,</span> views\n\nregister_converter<span class=\"p\">(</span>converters<span class=\"o\">.</span>FourDigitYearConverter<span class=\"p\">,</span> <span class=\"s2\">&quot;yyyy&quot;</span><span class=\"p\">)</span>\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>special_case_2003<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;yyyy:year&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"using-regular-expressions\">\n<h2>Använda reguljära uttryck<a class=\"heading-anchor\" href=\"#using-regular-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om syntaxen för sökvägar och omvandlare inte är tillräcklig för att definiera dina URL-mönster kan du också använda reguljära uttryck. För att göra det, använd <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">re_path()</code></a> istället för <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>.</p>\n<p>I Python är syntaxen för namngivna grupper av reguljära uttryck <code class=\"docutils literal notranslate\">(?P&lt;name&gt;pattern)</code>, där <code class=\"docutils literal notranslate\">name</code> är namnet på gruppen och <code class=\"docutils literal notranslate\">pattern</code> är ett mönster som ska matchas.</p>\n<p>Här är exemplet URLconf från tidigare, omskrivet med hjälp av reguljära uttryck:</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> path<span class=\"p\">,</span> re_path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/2003/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>special_case_2003<span class=\"p\">),</span>\n    re_path<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/$&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">),</span>\n    re_path<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/(?P&lt;month&gt;[0-9]</span><span class=\"si\">{2}</span><span class=\"s2\">)/$&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>month_archive<span class=\"p\">),</span>\n    re_path<span class=\"p\">(</span>\n        <span class=\"sa\">r</span><span class=\"s2\">&quot;^articles/(?P&lt;year&gt;[0-9]</span><span class=\"si\">{4}</span><span class=\"s2\">)/(?P&lt;month&gt;[0-9]</span><span class=\"si\">{2}</span><span class=\"s2\">)/(?P&lt;slug&gt;[\\w-]+)/$&quot;</span><span class=\"p\">,</span>\n        views<span class=\"o\">.</span>article_detail<span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta åstadkommer ungefär samma sak som det föregående exemplet, förutom:</p>\n<ul class=\"simple\">\n<li><p>De exakta webbadresser som kommer att matcha är något mer begränsade. Till exempel kommer årtalet 10000 inte längre att matcha eftersom årtalen måste vara exakt fyra siffror långa.</p></li>\n<li><p>Varje argument som fångas upp skickas till vyn som en sträng, oavsett vilken typ av matchning det reguljära uttrycket ger.</p></li>\n</ul>\n<p>När du byter från att använda <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> till <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">re_path()</code></a> eller vice versa är det särskilt viktigt att vara medveten om att typen av vyargument kan ändras och att du därför kan behöva anpassa dina vyer.</p>\n<section id=\"using-unnamed-regular-expression-groups\">\n<h3>Använda icke namngivna grupper av reguljära uttryck<a class=\"heading-anchor\" href=\"#using-unnamed-regular-expression-groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Förutom syntaxen för namngivna grupper, t.ex. <code class=\"docutils literal notranslate\">(?P&lt;year&gt;[0-9]{4})</code>, kan du också använda den kortare syntaxen för icke namngivna grupper, t.ex. <code class=\"docutils literal notranslate\">([0-9]{4})</code>.</p>\n<p>Denna användning är inte särskilt rekommenderad eftersom det gör det lättare att av misstag införa fel mellan den avsedda betydelsen av en match och argumenten i vyn.</p>\n<p>I båda fallen rekommenderas att endast en stil används inom en given regex. När båda stilarna blandas ignoreras alla icke namngivna grupper och endast namngivna grupper skickas till view-funktionen.</p>\n</section>\n<section id=\"nested-arguments\">\n<h3>Nästlade argument<a class=\"heading-anchor\" href=\"#nested-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Reguljära uttryck tillåter nästlade argument, och Django kommer att lösa dem och skicka dem till vyn. Vid reversering kommer Django att försöka fylla i alla yttre infångade argument och ignorera alla nästlade infångade argument. Tänk på följande URL-mönster som valfritt tar ett sidargument:</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> re_path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    re_path<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^blog/(page-([0-9]+)/)?$&quot;</span><span class=\"p\">,</span> blog_articles<span class=\"p\">),</span>  <span class=\"c1\"># bad</span>\n    re_path<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^comments/(?:page-(?P&lt;page_number&gt;[0-9]+)/)?$&quot;</span><span class=\"p\">,</span> comments<span class=\"p\">),</span>  <span class=\"c1\"># good</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Båda mönstren använder nästlade argument och kommer att lösas: till exempel kommer <code class=\"docutils literal notranslate\">blog/page-2/</code> att resultera i en matchning till <code class=\"docutils literal notranslate\">blog_articles</code> med två positionella argument: <code class=\"docutils literal notranslate\">page-2/</code> och <code class=\"docutils literal notranslate\">2</code>. Det andra mönstret för <code class=\"docutils literal notranslate\">comments</code> kommer att matcha <code class=\"docutils literal notranslate\">comments/page-2/</code> med nyckelordsargumentet <code class=\"docutils literal notranslate\">page_number</code> satt till 2. Det yttre argumentet i detta fall är ett icke-fångande argument <code class=\"docutils literal notranslate\">(?:...)</code>.</p>\n<p>Vyn <code class=\"docutils literal notranslate\">blog_articles</code> behöver det yttersta infångade argumentet för att kunna vändas, <code class=\"docutils literal notranslate\">page-2/</code> eller inga argument i det här fallet, medan <code class=\"docutils literal notranslate\">comments</code> kan vändas med antingen inga argument eller ett värde för <code class=\"docutils literal notranslate\">page_number</code>.</p>\n<p>Kapslade argument skapar en stark koppling mellan vyargumenten och URL:en, vilket illustreras av <code class=\"docutils literal notranslate\">blog_articles</code>: vyn tar emot en del av URL:en (<code class=\"docutils literal notranslate\">page-2/</code>) i stället för bara det värde som vyn är intresserad av. Denna koppling är ännu mer uttalad vid reversering, eftersom vi för att reversera vyn måste skicka URL-biten istället för sidnumret.</p>\n<p>En tumregel är att bara fånga de värden som vyn behöver arbeta med och att använda argument som inte fångas när det reguljära uttrycket behöver ett argument men vyn ignorerar det.</p>\n</section>\n</section>\n<section id=\"what-the-urlconf-searches-against\">\n<h2>Vad URLconf söker efter<a class=\"heading-anchor\" href=\"#what-the-urlconf-searches-against\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URLconf söker mot den begärda URL:en som en vanlig Python-sträng. Detta inkluderar inte GET- eller POST-parametrar eller domännamnet.</p>\n<p>Till exempel, i en begäran till <code class=\"docutils literal notranslate\">https://www.example.com/myapp/</code> kommer URLconf att leta efter <code class=\"docutils literal notranslate\">myapp/</code>.</p>\n<p>I en begäran till <code class=\"docutils literal notranslate\">https://www.example.com/myapp/?page=3</code> kommer URLconf att leta efter <code class=\"docutils literal notranslate\">myapp/</code>.</p>\n<p>URLconf tittar inte på förfrågningsmetoden. Med andra ord kommer alla förfrågningsmetoder - <code class=\"docutils literal notranslate\">POST</code>, <code class=\"docutils literal notranslate\">GET</code>, <code class=\"docutils literal notranslate\">HEAD</code> osv. – kommer att dirigeras till samma funktion för samma URL.</p>\n</section>\n<section id=\"specifying-defaults-for-view-arguments\">\n<h2>Ange standardvärden för vyargument<a class=\"heading-anchor\" href=\"#specifying-defaults-for-view-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ett praktiskt trick är att ange standardparametrar för dina vyers argument. Här är ett exempel på URLconf och view:</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\"># URLconf</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>page<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;blog/page&lt;int:num&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>page<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n\n<span class=\"c1\"># View (in blog/views.py)</span>\n<span class=\"k\">def</span> <span class=\"nf\">page</span><span class=\"p\">(</span>request<span class=\"p\">,</span> num<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Output the appropriate page of blog entries, according to num.</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>I exemplet ovan pekar båda URL-mönstren på samma vy - <code class=\"docutils literal notranslate\">views.page</code> - men det första mönstret fångar inte upp något från URL:en. Om det första mönstret matchar kommer funktionen <code class=\"docutils literal notranslate\">page()</code> att använda sitt standardargument för <code class=\"docutils literal notranslate\">num</code>, <code class=\"docutils literal notranslate\">1</code>. Om det andra mönstret matchar, kommer <code class=\"docutils literal notranslate\">page()</code> att använda det värde för <code class=\"docutils literal notranslate\">num</code> som fångades upp.</p>\n</section>\n<section id=\"performance\">\n<h2>Prestanda<a class=\"heading-anchor\" href=\"#performance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django bearbetar reguljära uttryck i listan <code class=\"docutils literal notranslate\">urlpatterns</code> som sammanställs första gången den öppnas. Efterföljande förfrågningar använder den cachade konfigurationen via URL-resolvern.</p>\n</section>\n<section id=\"syntax-of-the-urlpatterns-variable\">\n<h2>Syntax för variabeln ”Urlpatterns<a class=\"heading-anchor\" href=\"#syntax-of-the-urlpatterns-variable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\">urlpatterns</code> bör vara en <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> av <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> och/eller <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">re_path()</code></a> instanser.</p>\n</section>\n<section id=\"error-handling\">\n<h2>Felhantering<a class=\"heading-anchor\" href=\"#error-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När Django inte kan hitta en matchning för den begärda URL:en, eller när ett undantag uppstår, anropar Django en vy för felhantering.</p>\n<p>De vyer som ska användas i dessa fall specificeras av fyra variabler. Deras standardvärden bör räcka för de flesta projekt, men ytterligare anpassning är möjlig genom att åsidosätta deras standardvärden.</p>\n<p>Se dokumentationen om <a class=\"reference internal\" href=\"/sv/6.1/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">Anpassa felvyer</span></a> för fullständig information.</p>\n<p>Sådana värden kan ställas in i din rot-URLconf. Att ställa in dessa variabler i någon annan URLconf kommer inte att ha någon effekt.</p>\n<p>Värdena måste vara callables, eller strängar som representerar den fullständiga Python-importvägen till den vy som ska anropas för att hantera det aktuella feltillståndet.</p>\n<p>Variablerna är:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">handler400</code> – Se <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.conf.urls.handler400\" title=\"django.conf.urls.handler400\"><code class=\"xref py py-data docutils literal notranslate\">django.conf.urls.handler400</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">handler403</code> – Se <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.conf.urls.handler403\" title=\"django.conf.urls.handler403\"><code class=\"xref py py-data docutils literal notranslate\">django.conf.urls.handler403</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">handler404</code> – Se <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.conf.urls.handler404\" title=\"django.conf.urls.handler404\"><code class=\"xref py py-data docutils literal notranslate\">django.conf.urls.handler404</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">handler500</code> – Se <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.conf.urls.handler500\" title=\"django.conf.urls.handler500\"><code class=\"xref py py-data docutils literal notranslate\">django.conf.urls.handler500</code></a>.</p></li>\n</ul>\n</section>\n<section id=\"including-other-urlconfs\">\n<span id=\"id3\"></span><h2>Inkludera andra URLconfs<a class=\"heading-anchor\" href=\"#including-other-urlconfs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När som helst kan dina ”URL-mönster” ”inkludera” andra URLconf-moduler. Detta innebär i princip att en uppsättning webbadresser ”rotas” under andra.</p>\n<p>Här är till exempel ett utdrag ur URLconf för själva <a class=\"reference external\" href=\"https://www.djangoproject.com/\">Django-webbplatsen</a>. Den innehåller ett antal andra URLconfs:</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> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ... snip ...</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;community/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;aggregator.urls&quot;</span><span class=\"p\">)),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;contact/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;contact.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"c1\"># ... snip ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>När Django stöter på <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> tar det bort den del av URL:en som matchade fram till den punkten och skickar återstående sträng till den inkluderade URLconf-filen för vidare bearbetning.</p>\n<p>En annan möjlighet är att inkludera ytterligare URL-mönster genom att använda en lista med <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>-instanser. Tänk till exempel på denna URLconf:</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> include<span class=\"p\">,</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">apps.main</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> main_views\n<span class=\"kn\">from</span> <span class=\"nn\">credit</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> credit_views\n\nextra_patterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;reports/&quot;</span><span class=\"p\">,</span> credit_views<span class=\"o\">.</span>report<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;reports/&lt;int:id&gt;/&quot;</span><span class=\"p\">,</span> credit_views<span class=\"o\">.</span>report<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;charge/&quot;</span><span class=\"p\">,</span> credit_views<span class=\"o\">.</span>charge<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> main_views<span class=\"o\">.</span>homepage<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;help/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;apps.help.urls&quot;</span><span class=\"p\">)),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;credit/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span>extra_patterns<span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>I det här exemplet kommer webbadressen <code class=\"docutils literal notranslate\">/credit/reports/</code> att hanteras av Django-vyn <code class=\"docutils literal notranslate\">credit_views.report()</code>.</p>\n<p>Detta kan användas för att ta bort redundans från URLconfs där ett enda mönsterprefix används upprepade gånger. Tänk till exempel på detta URLconf:</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> path\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/history/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>history<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/edit/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>edit<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/discuss/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>discuss<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/permissions/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>permissions<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Vi kan förbättra detta genom att bara ange det gemensamma sökvägsprefixet en gång och gruppera de suffix som skiljer sig åt:</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> include<span class=\"p\">,</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span>\n        <span class=\"s2\">&quot;&lt;page_slug&gt;-&lt;page_id&gt;/&quot;</span><span class=\"p\">,</span>\n        include<span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                path<span class=\"p\">(</span><span class=\"s2\">&quot;history/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>history<span class=\"p\">),</span>\n                path<span class=\"p\">(</span><span class=\"s2\">&quot;edit/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>edit<span class=\"p\">),</span>\n                path<span class=\"p\">(</span><span class=\"s2\">&quot;discuss/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>discuss<span class=\"p\">),</span>\n                path<span class=\"p\">(</span><span class=\"s2\">&quot;permissions/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>permissions<span class=\"p\">),</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<section id=\"captured-parameters\">\n<h3>Uppfångade parametrar<a class=\"heading-anchor\" href=\"#captured-parameters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En inkluderad URLconf tar emot eventuella parametrar från överordnade URLconfs, så följande exempel är giltigt:</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 settings/urls/main.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;username&gt;/blog/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;foo.urls.blog&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># In foo/urls/blog.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>blog<span class=\"o\">.</span>index<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;archive/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>blog<span class=\"o\">.</span>archive<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>I exemplet ovan skickas den fångade variabeln <code class=\"docutils literal notranslate\">&quot;username&quot;</code> till den inkluderade URLconf, som förväntat.</p>\n</section>\n</section>\n<section id=\"passing-extra-options-to-view-functions\">\n<span id=\"views-extra-options\"></span><h2>Överföra extra alternativ till vyfunktioner<a class=\"heading-anchor\" href=\"#passing-extra-options-to-view-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>URLconfs har en hook som gör att du kan skicka extra argument till dina vyfunktioner, som en Python-ordbok.</p>\n<p>Funktionen <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> kan ta ett valfritt tredje argument som bör vara en ordbok med extra nyckelordsargument som ska skickas till vyfunktionen.</p>\n<p>Till exempel:</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> path\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;blog/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>I det här exemplet kommer Django att anropa <code class=\"docutils literal notranslate\">views.year_archive(request, year=2005, foo='bar')</code> för en begäran till <code class=\"docutils literal notranslate\">/blog/2005/</code>.</p>\n<p>Denna teknik används i <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/syndication/\"><span class=\"doc\">syndication framework</span></a> för att skicka metadata och alternativ till vyer.</p>\n<aside class=\"admonition-dealing-with-conflicts admonition\" role=\"note\">\n<p class=\"admonition-title\">Hantering av konflikter</p>\n<p>Det är möjligt att ha ett URL-mönster som fångar upp namngivna nyckelordsargument och även skickar argument med samma namn i sin ordbok med extra argument. När detta händer kommer argumenten i ordlistan att användas i stället för de argument som fångas upp i URL:en.</p>\n</aside>\n<section id=\"passing-extra-options-to-include\">\n<h3>Skicka extra alternativ till <code class=\"docutils literal notranslate\">include()</code><a class=\"heading-anchor\" href=\"#passing-extra-options-to-include\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>På samma sätt kan du skicka extra alternativ till <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> och varje rad i den inkluderade URLconf kommer att skickas till de extra alternativen.</p>\n<p>Till exempel är dessa två URLconf-uppsättningar funktionellt identiska:</p>\n<p>Set ett:</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\"># main.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;inner&quot;</span><span class=\"p\">),</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># inner.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">mysite</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<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>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>about<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Set två:</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\"># main.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">mysite</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;blog/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;inner&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n\n<span class=\"c1\"># inner.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<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> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>about<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">}),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Observera att extra alternativ <em>alltid</em> kommer att skickas till <em>alla</em> rader i den inkluderade URLconf, oavsett om radens vy faktiskt accepterar dessa alternativ som giltiga. Av denna anledning är denna teknik endast användbar om du är säker på att varje vy i den inkluderade URLconf accepterar de extra alternativ du skickar.</p>\n</section>\n</section>\n<section id=\"reverse-resolution-of-urls\">\n<h2>Omvänd upplösning av webbadresser<a class=\"heading-anchor\" href=\"#reverse-resolution-of-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ett vanligt behov när man arbetar med ett Django-projekt är möjligheten att få webbadresser i sina slutliga former antingen för inbäddning i genererat innehåll (vyer och tillgångars webbadresser, webbadresser som visas för användaren etc.) eller för hantering av navigeringsflödet på serversidan (omdirigeringar etc.)</p>\n<p>Det är starkt önskvärt att undvika att hårdkoda dessa URL:er (en arbetskrävande, oskalbar och felbenägen strategi). Lika farligt är att hitta på ad hoc-mekanismer för att skapa URL:er parallellt med den utformning som beskrivs av URLconf, eftersom det kan leda till URL:er som blir inaktuella med tiden.</p>\n<p>Vad som behövs är med andra ord en DRY-mekanism. Bland andra fördelar skulle det göra det möjligt att utveckla URL-designen utan att behöva gå igenom hela projektets källkod för att söka efter och ersätta föråldrade URL:er.</p>\n<p>Den primära information vi har tillgänglig för att få en URL är en identifiering (t.ex. namnet) av den vy som ansvarar för att hantera den. Andra delar av informationen som nödvändigtvis måste delta i sökningen efter rätt URL är typerna (positionella, nyckelord) och värdena för vyargumenten.</p>\n<p>Django tillhandahåller en lösning så att URL-mapparen är den enda förvararen av URL-designen. Du matar den med din URLconf och sedan kan den användas i båda riktningarna:</p>\n<ul class=\"simple\">\n<li><p>Med utgångspunkt i en URL som begärs av användaren/webbläsaren anropar den rätt Django-vy och ger alla argument som den kan behöva med deras värden som extraheras från URL.</p></li>\n<li><p>Med utgångspunkt från identifieringen av motsvarande Django-vy plus värdena för de argument som skulle skickas till den, får du den tillhörande URL:en.</p></li>\n</ul>\n<p>Den första är den användning som vi har diskuterat i de tidigare avsnitten. Den andra är vad som kallas <em>omvänd upplösning av webbadresser</em>, <em>omvänd URL-matchning</em>, <em>omvänd URL-uppslagning</em> eller helt enkelt <em>URL-reversering</em>.</p>\n<p>Django tillhandahåller verktyg för att utföra URL-reversering som matchar de olika lager där webbadresser behövs:</p>\n<ul class=\"simple\">\n<li><p>I mallar: Använda malltaggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\">url</code></a>.</p></li>\n<li><p>I Python-kod: Med hjälp av funktionen <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a>.</p></li>\n<li><p>I kod på högre nivå relaterad till hantering av webbadresser för Django-modellinstanser: Metoden <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.get_absolute_url\" title=\"django.db.models.Model.get_absolute_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_absolute_url()</code></a>.</p></li>\n</ul>\n<section id=\"examples\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tänk igen på denna URLconf-post:</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> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;news-year-archive&quot;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Enligt denna design är URL:en för arkivet som motsvarar år <em>nnnn</em> <code class=\"docutils literal notranslate\">/artiklar/&lt;nnnn&gt;/</code>.</p>\n<p>Du kan få dessa i mallkod genom att använda:</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=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;news-year-archive&#39;</span> <span class=\"m\">2012</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>2012 Archive<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"c\">{# Or with the year in a template context variable: #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">yearvar</span> <span class=\"k\">in</span> <span class=\"nv\">year_list</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;news-year-archive&#39;</span> <span class=\"nv\">yearvar</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">yearvar</span> <span class=\"cp\">}}</span> Archive<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Eller i Python-kod:</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.http</span> <span class=\"kn\">import</span> HttpResponseRedirect\n<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\">redirect_to_year</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    year <span class=\"o\">=</span> <span class=\"mi\">2006</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span>reverse<span class=\"p\">(</span><span class=\"s2\">&quot;news-year-archive&quot;</span><span class=\"p\">,</span> args<span class=\"o\">=</span><span class=\"p\">(</span>year<span class=\"p\">,)))</span>\n</code></pre></div>\n<p>Om det av någon anledning skulle beslutas att URL:erna där innehållet i de årliga artikelarkiven publiceras ska ändras, behöver du bara ändra posten i URLconf.</p>\n<p>I vissa scenarier där vyerna är av generisk karaktär kan det finnas ett många-till-ett-förhållande mellan webbadresser och vyer. I dessa fall är vynamnet inte en tillräckligt bra identifierare för det när det är dags att vända webbadresser. Läs nästa avsnitt för att få veta mer om den lösning som Django tillhandahåller för detta.</p>\n</section>\n</section>\n<section id=\"naming-url-patterns\">\n<span id=\"id4\"></span><h2>Namngivning av URL-mönster<a class=\"heading-anchor\" href=\"#naming-url-patterns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att kunna utföra URL-reversering måste du använda <strong>namngivna URL-mönster</strong> som i exemplen ovan. Strängen som används för URL-namnet kan innehålla vilka tecken du vill. Du är inte begränsad till giltiga Python-namn.</p>\n<p>När du namnger URL-mönster bör du välja namn som sannolikt inte krockar med andra applikationers namnval. Om du kallar ett URL-mönster <code class=\"docutils literal notranslate\">comment</code> och en annan applikation gör samma sak beror den URL som <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> hittar på vilket mönster som ligger sist i projektets lista <code class=\"docutils literal notranslate\">urlpatterns</code>.</p>\n<p>Om du sätter ett prefix på dina URL-namn, kanske härlett från applikationens namn (t.ex. <code class=\"docutils literal notranslate\">myapp-comment</code> i stället för <code class=\"docutils literal notranslate\">comment</code>), minskar risken för kollisioner.</p>\n<p>Du kan medvetet välja <em>samma URL-namn</em> som en annan applikation om du vill åsidosätta en vy. Ett vanligt användningsfall är att åsidosätta <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/default/#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\">LoginView</code></a>. Delar av Django och de flesta tredjepartsappar förutsätter att denna vy har ett URL-mönster med namnet <code class=\"docutils literal notranslate\">login</code>. Om du har en egen inloggningsvy och ger dess URL namnet <code class=\"docutils literal notranslate\">login</code> hittar <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> din egen vy så länge den finns i <code class=\"docutils literal notranslate\">urlpatterns</code> efter att <code class=\"docutils literal notranslate\">django.contrib.auth.urls</code> har inkluderats (om den alls inkluderas).</p>\n<p>Du kan också använda samma namn för flera URL-mönster om de skiljer sig åt i sina argument. Utöver URL-namnet matchar <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> antalet argument och namnen på nyckelordsargumenten. Sökvägskonverterare kan även utlösa <code class=\"docutils literal notranslate\">ValueError</code> för att ange att ingen matchning finns; se <a class=\"reference internal\" href=\"#registering-custom-path-converters\"><span class=\"std std-ref\">Registrering av anpassade sökvägsomvandlare</span></a> för detaljer.</p>\n</section>\n<section id=\"url-namespaces\">\n<span id=\"topics-http-defining-url-namespaces\"></span><h2>Namnrymder för URL<a class=\"heading-anchor\" href=\"#url-namespaces\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"introduction\">\n<h3>Introduktion<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Med URL-namnrymder kan du unikt vända <a class=\"reference internal\" href=\"#naming-url-patterns\"><span class=\"std std-ref\">namngivna URL-mönster</span></a> även om olika program använder samma URL-namn. Det är en god praxis för tredjepartsappar att alltid använda namnrymder för webbadresser (som vi gjorde i handledningen). På samma sätt kan du också vända webbadresser om flera instanser av en applikation distribueras. Med andra ord, eftersom flera instanser av en enda applikation kommer att dela namngivna webbadresser, ger namnrymder ett sätt att skilja dessa namngivna webbadresser åt.</p>\n<p>Django-applikationer som använder URL-namnutrymmen korrekt kan driftsättas mer än en gång för en viss webbplats. Till exempel har <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.admin</code></a> klassen <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a>, som gör att du kan <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/#multiple-admin-sites\"><span class=\"std std-ref\">driftsätta mer än en administratörsinstans</span></a>. I ett senare exempel diskuterar vi idén att driftsätta enkätapplikationen från handledningen på två olika platser, så att samma funktionalitet kan användas av två olika målgrupper (författare och utgivare).</p>\n<p>En URL-namnrymd består av två delar, som båda är strängar:</p>\n<dl class=\"simple glossary\">\n<dt id=\"term-application-namespace\">applikationens namnområde<a class=\"heading-anchor\" href=\"#term-application-namespace\"><span class=\"visually-hidden\">Link to this term</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>Detta beskriver namnet på den applikation som distribueras. Varje instans av en enskild applikation kommer att ha samma applikationsnamnrymd. Till exempel har Djangos admin-applikation det något förutsägbara applikationsnamnområdet <code class=\"docutils literal notranslate\">'admin'</code>.</p>\n</dd>\n<dt id=\"term-instance-namespace\">namnrymd för instans<a class=\"heading-anchor\" href=\"#term-instance-namespace\"><span class=\"visually-hidden\">Link to this term</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>Detta identifierar en specifik instans av en applikation. Instansnamnrymder bör vara unika för hela projektet. En instansnamnrymd kan dock vara densamma som applikationens namnrymd. Detta används för att ange en standardinstans av en applikation. Till exempel har standardinstansen Django admin ett instansnamnområde på <code class=\"docutils literal notranslate\">'admin'</code>.</p>\n</dd>\n</dl>\n<p>Namngivna URL:er anges med operatorn <code class=\"docutils literal notranslate\">':'</code>. Huvudindexsidan för admin-programmet refereras till exempel med <code class=\"docutils literal notranslate\">'admin:index'</code>. Detta anger namnrymden <code class=\"docutils literal notranslate\">'admin'</code> och den namngivna URL:en <code class=\"docutils literal notranslate\">'index'</code>.</p>\n<p>Namnrymder kan också vara nästlade. Den namngivna URL:en <code class=\"docutils literal notranslate\">'sports:polls:index'</code> letar efter ett mönster med namnet <code class=\"docutils literal notranslate\">'index'</code> i namnrymden <code class=\"docutils literal notranslate\">'polls'</code> som i sin tur definieras i namnrymden <code class=\"docutils literal notranslate\">'sports'</code> på högsta nivån.</p>\n</section>\n<section id=\"reversing-namespaced-urls\">\n<span id=\"topics-http-reversing-url-namespaces\"></span><h3>Återställning av namnlösa URL:er<a class=\"heading-anchor\" href=\"#reversing-namespaced-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När Django får en URL med namnområde (t.ex. <code class=\"docutils literal notranslate\">'polls:index'</code>) att lösa, delar Django upp det fullständigt kvalificerade namnet i delar och försöker sedan följande uppslagning:</p>\n<ol class=\"arabic\">\n<li><p>Först letar Django efter en matchande <span class=\"xref std std-term\">applikationsnamnrymd</span> (i det här exemplet <code class=\"docutils literal notranslate\">'polls'</code>). Detta kommer att ge en lista över instanser av den applikationen.</p></li>\n<li><p>Om en aktuell applikation är definierad hittar och returnerar Django URL-lösaren för den instansen. Den aktuella applikationen kan anges med argumentet <code class=\"docutils literal notranslate\">current_app</code> till funktionen <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a>.</p>\n<p>Malltaggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\">url</code></a> använder namnrymden för den aktuella vyn som aktuell applikation i en <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>. Du kan åsidosätta denna standard genom att ställa in den aktuella applikationen på attributet <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.current_app\" title=\"django.http.HttpRequest.current_app\"><code class=\"xref py py-attr docutils literal notranslate\">request.current_app</code></a>.</p>\n</li>\n<li><p>Om det inte finns någon aktuell applikation letar Django efter en standardapplikationsinstans. Standardapplikationsinstansen är den instans som har en <a class=\"reference internal\" href=\"#term-instance-namespace\"><span class=\"xref std std-term\">instance namespace</span></a> som matchar <a class=\"reference internal\" href=\"#term-application-namespace\"><span class=\"xref std std-term\">application namespace</span></a> (i det här exemplet en instans av <code class=\"docutils literal notranslate\">polls</code> som heter <code class=\"docutils literal notranslate\">'polls'</code>).</p></li>\n<li><p>Om det inte finns någon standardapplikationsinstans kommer Django att välja den senast distribuerade instansen av applikationen, oavsett vad dess instansnamn kan vara.</p></li>\n<li><p>Om den angivna namnrymden inte matchar en <span class=\"xref std std-term\">applikationsnamnrymd</span> i steg 1, kommer Django att försöka göra en direktuppslagning av namnrymden som en <span class=\"xref std std-term\">instansnamnrymd</span>.</p></li>\n</ol>\n<p>Om det finns nästlade namnrymder upprepas dessa steg för varje del av namnrymden tills endast vynamnet är olöst. Vynamnet kommer då att lösas upp till en URL i den namnrymd som har hittats.</p>\n<section id=\"id5\">\n<h4>Exempel<a class=\"heading-anchor\" href=\"#id5\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att visa hur den här lösningsstrategin fungerar kan vi ta ett exempel med två instanser av applikationen <code class=\"docutils literal notranslate\">polls</code> från handledningen: en som heter <code class=\"docutils literal notranslate\">'author-polls</code> och en som heter <code class=\"docutils literal notranslate\">'publisher-polls</code>. Antag att vi har förbättrat applikationen så att den tar hänsyn till instansnamnrymden när den skapar och visar omröstningar.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;author-polls/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">,</span> namespace<span class=\"o\">=</span><span class=\"s2\">&quot;author-polls&quot;</span><span class=\"p\">)),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;publisher-polls/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">,</span> namespace<span class=\"o\">=</span><span class=\"s2\">&quot;publisher-polls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\napp_name <span class=\"o\">=</span> <span class=\"s2\">&quot;polls&quot;</span>\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>IndexView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>DetailView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Med hjälp av denna inställning kan följande sökningar göras:</p>\n<ul>\n<li><p>Om en av instanserna är aktuell - säg, om vi renderade detaljsidan i instansen <code class=\"docutils literal notranslate\">'author-polls</code> - kommer <code class=\"docutils literal notranslate\">'polls:index</code> att lösa till indexsidan i instansen <code class=\"docutils literal notranslate\">'author-polls</code>; dvs. båda följande kommer att resultera i <code class=\"docutils literal notranslate\">&quot;/author-polls/&quot;</code>.</p>\n<p>I metoden för en klassbaserad syn:</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>reverse<span class=\"p\">(</span><span class=\"s2\">&quot;polls:index&quot;</span><span class=\"p\">,</span> current_app<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>request<span class=\"o\">.</span>resolver_match<span class=\"o\">.</span>namespace<span class=\"p\">)</span>\n</code></pre></div>\n<p>och i mallen:</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\">url</span> <span class=\"s1\">&#39;polls:index&#39;</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>Om det inte finns någon aktuell instans - till exempel om vi renderar en sida någon annanstans på webbplatsen - kommer <code class=\"docutils literal notranslate\">'polls:index'</code> att lösas till den senast registrerade instansen av <code class=\"docutils literal notranslate\">polls</code>. Eftersom det inte finns någon standardinstans (instansnamnrymden för <code class=\"docutils literal notranslate\">'polls</code>), kommer den senast registrerade instansen av <code class=\"docutils literal notranslate\">polls</code> att användas. Detta skulle vara <code class=\"docutils literal notranslate\">'publisher-polls</code> eftersom den deklareras sist i <code class=\"docutils literal notranslate\">urlpatterns</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">'author-polls:index'</code> löses alltid till indexsidan för instansen <code class=\"docutils literal notranslate\">'author-polls'</code> (och på samma sätt för <code class=\"docutils literal notranslate\">'publisher-polls'</code>).</p></li>\n</ul>\n<p>Om det också fanns en standardinstans - dvs. en instans med namnet <code class=\"docutils literal notranslate\">'polls'</code> - skulle den enda förändringen jämfört med ovan vara i det fall då det inte finns någon aktuell instans (den andra punkten i listan ovan). I det här fallet skulle <code class=\"docutils literal notranslate\">'polls:index'</code> resolva till indexsidan för standardinstansen istället för den instans som deklarerades sist i <code class=\"docutils literal notranslate\">urlpatterns</code>.</p>\n</section>\n</section>\n<section id=\"url-namespaces-and-included-urlconfs\">\n<span id=\"namespaces-and-include\"></span><h3>URL-namnrymder och inkluderade URL-konf<a class=\"heading-anchor\" href=\"#url-namespaces-and-included-urlconfs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Applikationsnamnrymder för inkluderade URLconfs kan anges på två sätt.</p>\n<p>För det första kan du ange ett <code class=\"docutils literal notranslate\">app_name</code>-attribut i den inkluderade URLconf-modulen, på samma nivå som <code class=\"docutils literal notranslate\">urlpatterns</code>-attributet. Du måste skicka den faktiska modulen, eller en strängreferens till modulen, till <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>, inte själva listan med <code class=\"docutils literal notranslate\">urlpatterns</code>.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\napp_name <span class=\"o\">=</span> <span class=\"s2\">&quot;polls&quot;</span>\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>IndexView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>DetailView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;polls/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>De webbadresser som definieras i <code class=\"docutils literal notranslate\">polls.urls</code> kommer att ha en applikationsnamnrymd <code class=\"docutils literal notranslate\">polls</code>.</p>\n<p>För det andra kan du inkludera ett objekt som innehåller inbäddade namnrymdsdata. Om du <code class=\"docutils literal notranslate\">include()</code> en lista med <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.re_path\" title=\"django.urls.re_path\"><code class=\"xref py py-func docutils literal notranslate\">re_path()</code></a> instanser, kommer URL:erna som finns i det objektet att läggas till i det globala namnområdet. Men du kan också <code class=\"docutils literal notranslate\">include()</code> en 2-tupel som innehåller:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>(&lt;list of path()/re_path() instances&gt;, &lt;application namespace&gt;)\n</code></pre></div>\n<p>Till exempel:</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> include<span class=\"p\">,</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\npolls_patterns <span class=\"o\">=</span> <span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        path<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>IndexView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n        path<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>DetailView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;detail&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n    <span class=\"s2\">&quot;polls&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;polls/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span>polls_patterns<span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta kommer att inkludera de nominerade URL-mönstren i den angivna applikationens namnrymd.</p>\n<p>Instansens namnområde kan anges med argumentet <code class=\"docutils literal notranslate\">namespace</code> till <a class=\"reference internal\" href=\"/sv/6.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>. Om instansnamnområdet inte anges kommer det att vara standard för det inkluderade URLconfs applikationsnamnområde. Detta innebär att det också kommer att vara standardinstansen för det namnområdet.</p>\n</section>\n</section>","rootId":"url-dispatcher","toc":[{"title":"Översikt","anchor":"overview","children":[]},{"title":"Hur Django behandlar en förfrågan","anchor":"how-django-processes-a-request","children":[]},{"title":"Exempel","anchor":"example","children":[]},{"title":"Banomvandlare","anchor":"path-converters","children":[]},{"title":"Registrering av anpassade sökvägsomvandlare","anchor":"registering-custom-path-converters","children":[]},{"title":"Använda reguljära uttryck","anchor":"using-regular-expressions","children":[{"title":"Använda icke namngivna grupper av reguljära uttryck","anchor":"using-unnamed-regular-expression-groups","children":[]},{"title":"Nästlade argument","anchor":"nested-arguments","children":[]}]},{"title":"Vad URLconf söker efter","anchor":"what-the-urlconf-searches-against","children":[]},{"title":"Ange standardvärden för vyargument","anchor":"specifying-defaults-for-view-arguments","children":[]},{"title":"Prestanda","anchor":"performance","children":[]},{"title":"Syntax för variabeln ”Urlpatterns","anchor":"syntax-of-the-urlpatterns-variable","children":[]},{"title":"Felhantering","anchor":"error-handling","children":[]},{"title":"Inkludera andra URLconfs","anchor":"including-other-urlconfs","children":[{"title":"Uppfångade parametrar","anchor":"captured-parameters","children":[]}]},{"title":"Överföra extra alternativ till vyfunktioner","anchor":"passing-extra-options-to-view-functions","children":[{"title":"Skicka extra alternativ till include()","anchor":"passing-extra-options-to-include","children":[]}]},{"title":"Omvänd upplösning av webbadresser","anchor":"reverse-resolution-of-urls","children":[{"title":"Exempel","anchor":"examples","children":[]}]},{"title":"Namngivning av URL-mönster","anchor":"naming-url-patterns","children":[]},{"title":"Namnrymder för URL","anchor":"url-namespaces","children":[{"title":"Introduktion","anchor":"introduction","children":[]},{"title":"Återställning av namnlösa URL:er","anchor":"reversing-namespaced-urls","children":[{"title":"Exempel","anchor":"id5","children":[]}]},{"title":"URL-namnrymder och inkluderade URL-konf","anchor":"url-namespaces-and-included-urlconfs","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"},{"docname":"topics/http/index","title":"Hantering av HTTP-förfrågningar","url":"/sv/6.1/topics/http/"}],"prev":{"docname":"topics/http/index","title":"Hantering av HTTP-förfrågningar","url":"/sv/6.1/topics/http/"},"next":{"docname":"topics/http/views","title":"Skriva synpunkter","url":"/sv/6.1/topics/http/views/"},"formats":{"html":"/sv/6.1/topics/http/urls/","markdown":"/sv/6.1/topics/http/urls.md","json":"/sv/6.1/topics/http/urls.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/http/urls.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/http/urls/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}