正則表達式詳解
urls.py
1 from django.conf.urls import url 2 3 4 5 from . import views 6 7 8 9 urlpatterns = [ 10 11 url(r'^articles/2003/$', views.special_case_2003), 12 13 #思考:如果用戶想看2004、2005、2006....等,你要寫一堆的url嗎,是不是在articles后面寫一個正則表達式/d{4}/就行啦,網址里面輸入127.0.0.1:8000/articles/1999/試一下看看 14 15 url(r'^articles/([0-9]{4})/$', views.year_archive), 16 17 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 18 19 #思考,如果你想拿到用戶輸入的什么年份,並通過這個年份去數據庫里面匹配對應年份的文章,你怎么辦?怎么獲取用戶輸入的年份啊,分組/(\d{4})/,一個小括號搞定 20 21 url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), 22 23 ]
views.py
views.py中視圖函數的寫法:
第一個參數必須是request,后面跟的三個參數是對應着上面分組正則匹配的每個參數,必須按順序對應
def article_detail(request,year,month,day):
return HttpResponse(year+month+day)
注意事項
1. urlpatterns中的元素按照書寫順序從上往下逐一匹配正則表達式,一旦匹配成功則不再繼續。
2. 若要從URL中捕獲一個值,只需要在它周圍放置一對圓括號(分組匹配)。
3. 不需要添加一個前導的反斜杠(也就是寫在正則最前面的那個/),因為每個URL 都有。例如,應該是^articles 而不是 ^/articles。
4. 每個正則表達式前面的'r' 是可選的但是建議加上。
5. ^articles$ 以什么結尾,以什么開頭,嚴格限制路徑
補充說明
# 是否開啟URL訪問地址后面不為'/'跳轉至帶有'/'的路徑的配置項
APPEND_SLASH=True
Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數為 APPEND_SLASH = True。 其作用就是自動在網址結尾加'/'。其效果就是:我們定義了urls.py:
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^blog/$', views.blog),
]
訪問http://www.example.com/blog時,默認將網址自動轉換為http://www.example/com/blog/。
如果在settings.py中設置了 APPEND_SLASH=False,此時我們再請求http://www.example.com/blog時就會提示找不到頁面。
