由於url是常常變化的。若是在代碼中寫死可能會常常改代碼。給url取個名字,之後使用url的時候就使用他的名字進行反轉就能夠了,就不須要寫死url了。python
在path
函數中,傳遞一個name
參數就能夠指定。示例代碼以下:app
urlpatterns = [ path('',views.index,name='index'), path('login/',views.login,name='login') ]
在多個app之間,有可能產生同名的url。這時候爲了不反轉url的時候產生混淆,能夠使用應用命名空間,來作區分。定義應用命名空間很是簡單,只要在app
的urls.py
中定義一個叫作app_name
的變量,來指定這個應用的命名空間便可。示例代碼以下:函數
# 應用命名空間 app_name = 'front' urlpatterns = [ path('',views.index,name='index'), path('login/',views.login,name='login') ]
之後在作反轉的時候就能夠使用應用命名空間:url名稱
的方式進行反轉。示例代碼以下:url
login_url = reverse('front:login')
一個app,能夠建立多個實例。能夠使用多個url映射同一個app。因此這就會產生一個問題。之後在作反轉的時候,若是使用應用命名空間,那麼就會發生混淆。爲了不這個問題。咱們能夠使用實例命名空間。實例命名空間也是很是簡單,只要在include
函數中傳遞一個namespace
變量便可。示例代碼以下:spa
urlpatterns = [ path('',include('front.urls')), # 同一個app下有兩個實例 path('cms1/',include('cms.urls',namespace='cms1')), path('cms2/',include('cms.urls',namespace='cms2')), ]
之後在作反轉的時候,就能夠根據實例命名空間來指定具體的url。示例代碼以下:code
def index(request): username = request.GET.get("username") if username: return HttpResponse('CMS首頁') else: # 獲取當前的命名空間 current_namespace = request.resolver_match.namespace return redirect(reverse("%s:login"%current_namespace))