1. 程式人生 > 其它 >Django的URL反向解析

Django的URL反向解析

Django的URL反向解析功能在模板檔案中和Python程式中有不同的呼叫方法:

  • 在模板檔案中用{%url%}標籤反向解析
  • 在Python程式中有django.urls.reverse()函式呼叫反向解析

url對映規則:

from django.urls import path,include
from app import views
urlparterns = [
    path('login/', views.login,name='login')       
]

其中定義了一個URL對映,並通過name引數將該對映命名為login。在需要獲得該URL的模板檔案中可以通過{%URL%}標籤進行聲名,比如:

<a href="{% URL 'login' %}">
    Login
</a>

其中用對映名“login”作為反向解析的引數,該模板解析後的結果為:

<a href="/login/">
Login
</a>

而在Python程式碼與模板檔案中的反向解析呼叫方式是使用reverse函式,比如:

from django.shortcuts import redirect
from django.urls import reverse

def login(request):
    return redirect(reverse(index))

帶引數的反向解析:反向解析還支援在URL路徑和被呼叫函式中有引數的情況,比如對於帶引數的對映:

from django.urls import path,inlude
from app import views

urlpatterns = [
    path('index/?P<user_id>',views.index,name='re_index'),
]

然後在模板檔案反向解析中,可以直接在{%URL%}標籤中新增引數,如:

<a href="{% URL 're_index',1 %}">
    使用者user_id為1
</a>

<!--
解析後結果為--> <a href="/index/1/"> 使用者user_id為1 </a>

在Python程式中反向解析如下:

from django.urls import reverse
from django.shortcuts import redirect

def redirect_to_index_1(request):
    return redirect(reverse(index,args=(1,)))