Django--URL(路由層)
阿新 • • 發佈:2018-11-10
一、django 靜態檔案配置
在配置檔案中settings.py
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
/templates/timer.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>python ison the way:{{ data}}</h1> <script src="/static/jquery-3.3.1.js"></script> <script type="text/javascript"> $('h1').click(function () { $(this).css('color','red') }) </script> </body> </html>
靜態檔案配置優化
二、簡單得路由配置
U RL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要為該URL呼叫的檢視函式之間的對映表;
你就是以這種方式告訴Django,對於客戶端發來的某個URL呼叫哪一段邏輯程式碼對應執行。
1、簡單的路由配置
# 路徑配置:路徑url-------->試圖函式views
views.py新增:
def specical_case_2003(request): return HttpResponse('special_case_2003')
import re re.search('^articles/2003/$', 'article/2003') # 可以匹配到 匹配開頭結尾 re.search('^articles/2003/$', 'article/2003/yun/1992') # 匹配不到 re.search('^articles/2003/', 'article/2003/yun/1991') # 可以匹配到 只匹配開頭
from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_path(r'^articles/([0-9]{4})/$', views.year_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]
注意: 若要從URL 中捕獲一個值,只需要在它周圍放置一對圓括號。 不需要新增一個前導的反斜槓,因為每個URL 都有。
例如,應該是^articles 而不是 ^/articles。 每個正則表示式前面的'r' 是可選的但是建議加上。它告訴Python 這個字串是“原始的” —— 字串中任何字元都不應該轉義 示例:
/articles/2005/03/ 請求將匹配列表中的第三個模式。Django 將呼叫函式views.month_archive(request, '2005', '03')。 /articles/2005/3/ 不匹配任何URL 模式,因為列表中的第三個模式要求月份應該是兩個數字。 /articles/2003/ 將匹配列表中的第一個模式不是第二個,因為模式按順序匹配,第一個會首先測試是否匹配。請像這樣自由插入一些特殊的情況來探測匹配的次序。 /articles/2003 不匹配任何一個模式,因為每個模式要求URL 以一個反斜線結尾。 /articles/2003/03/03/ 將匹配最後一個模式。Django 將呼叫函式views.article_detail(request, '2003', '03', '03')。
2、有名分組
上面的示例使用簡單的、沒有命名的正則表示式組(通過圓括號)來捕獲URL 中的值並以位置 引數傳遞給檢視。在更高階的用法中,
可以使用命名的正則表示式組來捕獲URL 中的值並以關鍵字 引數傳遞給檢視。 在Python 正則表示式中,命名正則表示式組的語法是(?Ppattern),
其中name 是組的名稱,pattern 是要匹配的模式。 下面是以上URLconf 使用命名組的重寫:
pattern 英 /'pæt(ə)n/ 美 /ˈpætərn/ 模式、圖案;vt模仿
from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), # moth_archive(request,y=2009,m=12)
views.py中,def moth_archive(request,y,m)位置引數位置寫錯不會造成出錯
def moth_archive(request,m,y)這樣寫也可以
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail), ]
---------------
def month_archive(request,year,month): return HttpResponse(year+'-'+month)
------------------
def month_archive(request,month,year): return HttpResponse(year+'-'+month)
這個實現與前面的示例完全相同,只有一個細微的差別:捕獲的值作為關鍵字引數而不是位置引數傳遞給檢視函式。例如:
/articles/2005/03/ 請求將呼叫views.month_archive(request, year='2005', month='03')函式,而不是views.month_archive(request, '2005', '03')。 /articles/2003/03/03/ 請求將呼叫函式views.article_detail(request, year='2003', month='03', day='03')。