url配置(urlconf)就像django所支撐**的目錄,它的本質是url與要為該url呼叫的檢視函式之間的對映表;你就是以這種方式告訴django,對於客戶端發來的某個url呼叫哪一段邏輯**對應執行
典型例子:
from django.urls import path
urlpatterns = [
path('articles', views.special),
]articles這個路由對應著檢視函式中special這個方法,瀏覽器輸入這個鏈結,就會響應到special這個函式來執行
from django.conf.urls import url
urlpatterns = [
url(正規表示式, views檢視函式,引數,別名),
]
views駛入函式:乙個可呼叫物件,通常為乙個檢視函式或乙個指定檢視函式路勁的字串
引數:可選的要傳遞給檢視函式的預設引數(字典形式),注意檢視函式需要相應的形參去接收
別名:乙個可選的name引數,,用作方向解析
注意:
-url(r'^$',admin.site.urls)
from django.conf.urls import url
urlpatterns = [
url(r'^login',views.login),
url(r'^login',views.login)
]'''
因為路由配置的過程是從上到下的乙個迴圈,正則會按照從上到下的順序去匹配根目錄下的位址,
/login/ 一旦被第乙個路由配置成功後,就不會被第二個路由配置就算能表面看能配置成功
'''urlpatterns = [
url(r'^login',views.login),
url(r'^login2',views.login)
]'''
這個也是同理,外界輸入/login2/也是正則先被r'^login'匹配到,
如果真有這樣的需求那麼要嚴格書寫指定結尾,如下
'''urlpatterns = [
url(r'^login',views.login),
url(r'^login2$',views.login)
]
# 是否開啟url訪問位址後面沒有/跳至帶有/的路徑配置項
其效果就是:
我們定義了urls.py:
from django.conf.urls import url
urlpatterns = [
url(r'^blog/$', views.blog),
]
訪問 時,預設將**自動轉換為 。
# 無名分組,把分組分出來的值,當做位置引數傳遞給檢視函式
url(r'^index/([0-9])/([0-9])', views.index)
通過正則中的分組將url下的位址拆分成幾個引數
# 有名分組,把分組出來的值,當做關鍵字引數傳遞給檢視函式
url(r'^login/(?p[0-9])/(?p[0-9])', views.login),
這個實現與前面的例項完全相同,只有乙個細微的差別:捕獲的值作為關鍵字引數而不是位置引數傳遞給檢視函式,這以為這你的urlconf會更加明晰且不容易產生引數順序問題的錯誤 —— 你可以在你的檢視函式定義中重新安排引數的順序。當然,這些好處是以簡潔為代價;
# ilovejaney/p/13748739.html
# 這種位址,把人名和id區分開
# 有名分組
url(r'(?p.*?)/p/(?p\d+).html',views.article)
# 無名分組
url(r'^(.*?)/p/(\d+).html',views.article)
#在瀏覽器輸入的鏈結與為該鏈結執行的函式形成對映關係,那麼在對映時,會自動該鏈結會自動給該函式傳入乙個requeset,裡面封裝了url的http請求協議中的內容,由於經過了伺服器已經轉換成變數。所以在執行函式時,可在函式內部通過requeset呼叫http協議中的內容。最後在加上分組時所形成的引數,那麼對應的函式需要在已有request形參的基礎上多出相應的形參。
原來動態頁面/login 做成/login.html 偽裝成靜態頁面,便於seo優化
1 有乙個總路徑,根路由,總路由負責做分發
3 使用:
-1 在根路由中配置
# 路由分發
# 第一種方式
# 第二種方式
urlpatterns = [
url(r'login/', views.login),
url(r'home/', views.home)
](重頭開始)模糊匹配
在使用django 專案時,乙個常見的需求是獲得url 的最終形式,以用於嵌入到生成的內容中(檢視中和顯示給使用者的url等)或者用於處理伺服器端的導航(重定向等)。人們強烈希望不要硬編碼這些url(費力、不可擴充套件且容易產生錯誤)或者設計一種與urlconf 毫不相關的專門的url 生成機制,因為這樣容易導致一定程度上產生過期的url。
在需要url 的地方,對於不同層級,django 提供不同的工具用於url 反查:
urlpatterns = [
url(r'^login',views.login,name='home'),
]1 通過路由的別名,解析出路由的位址
2 用在檢視函式中:
url = reverse('home')
print(url)
3 模板檔案中
4 作用?
動態根據路由別名獲得路徑,一旦路徑改變,不需要改變其他**,也能獲得其變更後的路徑
其原理:
a=bb=c
如果a換成了g,那麼c也能通過b實時的得到變更後的g
命名空間(英語:namespace)是表示識別符號的可見範圍。乙個識別符號可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在乙個新的命名空間中可定義任何識別符號,它們不會與任何已有的識別符號發生衝突,因為已有的定義都處於其它命名空間中。
由於name沒有作用域,django在反解url時,會在專案全域性順序搜尋,當查詢到第乙個name指定url時,立即返回
總 urls.py
#使用步驟
1 在總路由中設定
2 在檢視函式中:
url = reverse('命名空間的名字:home') # home就是路由的別名
3 模板檔案中使用
例子
#總路由
#輸出
示範
#總路由
#輸出
Django之路由控制配置
django即支援1.x版本的路由配置也支援2.x的路由配置 from django.contrib import admin from django.urls import path,re path urlpatterns path admin admin.site.urls path timer...
django 路由控制之命名空間
命名空間 英語 namespace 是表示識別符號的可見範圍。乙個識別符號可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在乙個新的命名空間中可定義任何識別符號,它們不會與任何已有的識別符號發生衝突,因為已有的定義都處於其它命名空間中。由於name沒有作用域,django在反解u...
Django路由系統
urlpatterns path 要匹配的路徑 可以是正規表示式 檢視函式,引數,別名 1 正規表示式 乙個正規表示式字串 2 檢視函式 乙個可呼叫物件,通常為乙個檢視函式或乙個指定檢視函式路徑的字串 3 引數 要傳遞給檢視函式的預設引數 字典形式,可選 4 別名 乙個可選的name引數 1 在py...