**基本格式 **
from django.conf.urls import url
#迴圈urlpatterns,找到對應的函式執行,匹配上乙個路徑就找到對應的函式執行,就不再往下迴圈了,並給函式傳乙個引數request,就是請求資訊的所有內容
urlpatterns = [
url(正規表示式, views檢視函式,引數,別名),
]
引數說明基本配置
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003), #思考:如果使用者想看2004、2005、2006....等,你要寫一堆的url嗎,是不是在articles後面寫乙個正規表示式/d/就行啦,**裡面輸入127.0.0.1:8000/articles/1999/試一下看看
url(r'^articles/([0-9])/$', views.year_archive),
url(r'^articles/([0-9])/([0-9])/$', views.month_archive), #思考,如果你想拿到使用者輸入的什麼年份,並通過這個年份去資料庫裡面匹配對應年份的文章,你怎麼辦?怎麼獲取使用者輸入的年份啊,分組/(\d)/,乙個小括號搞定
url(r'^articles/([0-9])/([0-9])/([0-9]+)/$', views.article_detail),
]
views.py中檢視函式的寫法:
第乙個引數必須是request,後面跟的三個引數是對應著上面分組正則匹配的每個引數的
注意事項urlpatterns中的元素按照書寫順序從上往下逐一匹配正規表示式,一旦匹配成功則不再繼續。
若要從url中捕獲乙個值,只需要在它周圍放置一對圓括號(分組匹配)。
不需要新增乙個前導的反斜槓(也就是寫在正則最前面的那個/),因為每個url 都有。例如,應該是^articles 而不是 ^/articles。
每個正規表示式前面的'r' 是可選的但是建議加上。
^articles& 以什麼結尾,以什麼開頭,嚴格限制路徑
補充說明
# 是否開啟url訪問位址後面不為/跳轉至帶有/的路徑的配置項
from django.conf.urls import url
urlpatterns = [
url(r'^blog/$', views.blog),
]
訪問 時,預設將**自動轉換為 。
在上述基本配置示例中,使用了簡單的正規表示式分組匹配來捕獲url中的值並以位置引數的形式傳遞給檢視,例如url(r'^articles/([0-9])/([0-9])/$', views.month_archive)
。而更高階的用法是,使用分組命名正規表示式組來捕獲url中的值並以關鍵字引數的形式傳遞給檢視。
在python的正規表示式中,分組命名正規表示式組的語法是(?ppattern)
,其中name
是組的名稱,pattern
是要匹配的模式。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?p[0-9])/$', views.year_archive),
url(r'^articles/(?p[0-9])/(?p[0-9])/$', views.month_archive),
url(r'^articles/(?p[0-9])/(?p[0-9])/(?p[0-9])/$', views.article_detail),
]
這個實現與前面的示例完全相同,只有乙個細微的差別:捕獲的值作為關鍵字引數而不是位置引數傳遞給檢視函式。
views.month_archive(request, year="2017", month="12"),year和month的位置可以換,沒所謂了,因為是按照名字來取資料的
urlconf匹配的位置**
urlconf 在請求的url 上查詢,將它當做乙個普通的python 字串。不包括get和post引數以及網域名稱。
urlconf 不檢查請求的方法。換句話講,所有的請求方法 —— 同乙個url的post
、get
、head
等等 —— 都將路由到相同的函式。
捕獲的引數永遠都是字串
每個在urlconf中捕獲的引數都作為乙個普通的python字串傳遞給檢視,無論正規表示式使用的是什麼匹配方式。例如,下面這行urlconf 中:
url(r'^articles/(?p[0-9])/$', views.year_archive),
傳遞到檢視函式views.year_archive()
中的year
引數永遠是乙個字串型別。
專案名下面的urls.py不再做路由與檢視函式對應關係
那麼反向解析的時候會怎麼樣,django能不能幫你自動識別出來呢?
結果是不行,他還沒有智慧型到區分到那個應用上,所以有兩種方式來解決:
### 方式
一、命名空間**
from django.conf.urls import url,include
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
現在就相當於給他們搞了個命名空間,我們在解析的時候:
通常情況下,起別名的時候,前面可以加上你的應用名,因為應用是不可能會重名的,所以只需要在你起別名的時候,在前面加上應用名就好了。
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
這個時候就永遠也不會重名了,除非有程式設計師不遵守這種規則。
咱們簡單來說就是可以給我們的url匹配規則起個名字,乙個url匹配模式起乙個名字。
這樣我們以後就不需要寫死url**了,只需要通過名字來呼叫當前的url。
舉個簡單的例子:
url(r'^home', views.home, name='home'), # 給我的url匹配模式起名(別名)為 home,別名不需要改,路徑你就可以隨便改了,別的地方使用這個路徑,就用別名來搞
url(r'^index/(\d*)', views.index, name='index'), # 給我的url匹配模式起名為index
在模板裡面可以這樣引用:
#模板渲染的時候,被django解析成了這個名字對應的那個url,這個過程叫做反向解析
在views函式中可以這樣引用
from django.urls import reverse #導如reverse方法
reverse("index", args=("2018", ))
在views函式中可以這樣引用
from django.urls import reverse
reverse("index", args=("2018", ))
Django的URL路由基礎
隨便新建個django專案,缺省會自動建立乙個 project name urls.py檔案,並自動包含一些內容,這就是專案的根url。如果要自己編寫url路由,基本也是這個套路。當使用者請求乙個頁面時,django根據下面的邏輯執行操作 1 決定要使用的根urlconf模組。通俗地講,就是你可以自...
Django之(URL)路由系統
簡而言之,django的路由系統作用就是使views裡面處理資料的函式與請求的url建立對映關係。使請求到來之後,根據urls.py裡的關係條目,去查詢到與請求對應的處理方法,從而返回給客戶端http頁面資料 django 專案中的url規則定義放在project 的urls.py目錄下,預設如下 ...
Django學習筆記之url路由
一 django中路由的作用 其本質是url與該url要呼叫的檢視函式之間的對映,就是為告訴django對客戶端發過來的某個url應該呼叫執行哪一段邏輯 二 路由基本的配置 from django.conf.urls import url urlpatterns必須是乙個由url 例項組成的pyth...