目錄正規表示式
include--url分發
命名url(別名)和url的反向解析
命名空間模式
url配置(urlconf)就像django 所支撐**的目錄。它的本質是url與要為該url呼叫的檢視函式之間的對映表。你就是以這種方式告訴django,對於這個url呼叫這段**,對於那個url呼叫那段**。
from django.conf.urls import url
#迴圈urlpatterns,找到對應的函式執行,匹配上乙個路徑就找到對應的函式執行,就不再往下迴圈了,並給函式傳乙個引數request,和wsgiref的environ類似,就是請求資訊的所有內容
urlpatterns = [
url(正規表示式, views檢視函式,引數,別名),
]
無名與有名分組。
分組命名正規表示式組的語法是(?ppattern)
,其中name
是組的名稱,pattern
是要匹配的模式。
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [url(r'^admin/', admin.site.urls),
url(r'^home/', views.home),
#路徑分發 不區別請求方法
url(r'^login/', views.login),
# 無名分組引數articles會攜帶兩個分組的位置引數,一一對應
# url(r'^articles/(\d+)/(\d+)/', views.articles),
# 有名分組引數articles會攜帶兩個分組的關鍵字引數
url(r'^articles/(?p\d+)/(?p\d+)/', views.articles),]
在檢視函式中可以指定預設值。
# return httpresponse('hahaha') # 返回字串
return render(request,'home.html') # 返回html檔案
def login(request):
if request.method == 'post':
print(request.post)
# name = request.post.get('username')
pwd = request.post.get('pwd')
if name == 'yan' and pwd == '123':
return httpresponse('登入成功!')
else:
return httpresponse('登入失敗!')
else:
return render(request, 'login.html')
# 無名匹配分組執行的函式,是位置引數
# def articles(request,year,month):
# print(year,month) # 獲取到year="2019" month="9"
# return httpresponse(year+'年'+month+'月所有文章!')
# 有名匹配分組執行的函式,是關鍵字引數
def articles(request,m,y):
print(y, m) # 獲取到y="2019" m="9"
return httpresponse(y + '年' + m +'月所有文章!')urlpatterns中的元素按照書寫順序從上往下逐一匹配正規表示式,一旦匹配成功則不再繼續。
若要從url中捕獲乙個值,只需要在它周圍放置一對圓括號(分組匹配)。
不需要新增乙個前導的反斜槓(也就是寫在正則最前面的那個/),因為每個url 都有。例如,應該是^articles 而不是 ^/articles。
每個正規表示式前面的'r' 是可選的但是建議加上。
^articles& 以什麼結尾,以什麼開頭,嚴格限制路徑。
捕獲的引數永遠都是字串:
每個在urlconf中捕獲的引數都作為乙個普通的python字串傳遞給檢視,無論正規表示式使用的是什麼匹配方式。(數字也是字串型別)
login.html 檔案
在專案目錄下的ulrs.py檔案引入include,完成以下配置
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^$', views.base) # 首頁 不加任何路徑,只有 127.0.0.1:8000
]
在urls.py檔案中:
url(r'^路徑/', views.函式名, name='別名'),
例如: url(r'^home2', views.home, name='home'),
在html檔案模板中:
多用於a、form表單。
例如: # /home2/
views.py
可用於重定向
from django.urls import reverse
reverse('別名') # 反向解析
例如: reverse("home") # /home2/
def my_url(request):
return redirect('別名') # 直接寫別名,不用reverse
如果在include路由分發的時候使用別名,會在reverse時發生路徑的錯誤。因此需要進行命名空間模式的設定。
# 反向解析
html檔案中:
django url 路由設定技巧
django的url使用方法 利用django開發站點。能夠設計出很優美的url規則,假設url的匹配規則 包括正規表示式 組織得比較好,view的結構就會比較清晰。比較easy維護。最簡單的形式 from django.conf.urls import patterns,url urlpatter...
django url路由引數錯誤
出現錯誤 typeerror get got an unexpected keyword argument teacher id 出錯原因 view類中,get方法獲得了乙個多餘的額引數,這個引數是通過url正規表示式模版取出的資料,url傳遞過來的引數 如何解決?get方法中再次增加乙個引數去接收...
Vue路由(vue router)03(子路由)
對於單頁面的vue應用,子路由的配置可能是必不可少的,其實vue的子路由配置很簡單。這篇文章是基於上一片文章 路由配置02 的。示例需求,早footer.vue模組中配置子路由 示例檔案footer01.vue和footer02.vue 1.在components資料夾下新建乙個children資料...