django中命名用法筆記

url命名:

爲何須要url命名?

由於url是常常變化的。若是在代碼中寫死可能會常常改代碼。給url取個名字,之後使用url的時候就使用他的名字進行反轉就能夠了,就不須要寫死url了。python

如何給一個url指定名稱?

path函數中,傳遞一個name參數就能夠指定。示例代碼以下:app

urlpatterns = [
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

應用命名空間:

在多個app之間,有可能產生同名的url。這時候爲了不反轉url的時候產生混淆,能夠使用應用命名空間,來作區分。定義應用命名空間很是簡單,只要在appurls.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)命名空間和實例命名空間:

一個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))
相關文章
相關標籤/搜索