django基礎知識之URLconf:


URLconf

  • 在settings.py文件中通過ROOT_URLCONF指定根級url的配置
  • urlpatterns是一個url()實例的列表
  • 一個url()對象包括:
    • 正則表達式
    • 視圖函數
    • 名稱name
  • 編寫URLconf的注意:
    • 若要從url中捕獲一個值,需要在它周圍設置一對圓括號
    • 不需要添加一個前導的反斜杠,如應該寫作'test/',而不應該寫作'/test/'
    • 每個正則表達式前面的r表示字符串不轉義
  • 請求的url被看做是一個普通的python字符串,進行匹配時不包括get或post請求的參數及域名

  • 正則表達式非命名組,通過位置參數傳遞給視圖
url(r'^([0-9]+)/$', views.detail, name='detail'),
  • 正則表達式命名組,通過關鍵字參數傳遞給視圖,本例中關鍵字參數為id
url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
  • 參數匹配規則:優先使用命名參數,如果沒有命名參數則使用位置參數
  • 每個捕獲的參數都作為一個普通的python字符串傳遞給視圖
  • 性能:urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得系統相當快

包含其它的URLconfs

  • 在應用中創建urls.py文件,定義本應用中的urlconf,再在項目的settings中使用include()
from django.conf.urls import include, url
urlpatterns = [
    url(r'^', include('booktest.urls', namespace='booktest')),
]
  • 匹配過程:先與主URLconf匹配,成功后再用剩余的部分與應用中的URLconf匹配
請求http://www.xxx.cn/booktest/1/
在sesstings.py中的配置:
url(r'^booktest/', include('booktest.urls', namespace='booktest')),
在booktest應用urls.py中的配置
url(r'^([0-9]+)/$', views.detail, name='detail'),
匹配部分是:/booktest/1/
匹配過程:在settings.py中與“booktest/”成功,再用“1/”與booktest應用的urls匹配
  • 使用include可以去除urlconf的冗余
  • 參數:視圖會收到來自父URLconf、當前URLconf捕獲的所有參數
  • 在include中通過namespace定義命名空間,用於反解析

URL的反向解析

  • 如果在視圖、模板中使用硬編碼的鏈接,在urlconf發生改變時,維護是一件非常麻煩的事情
  • 解決:在做鏈接時,通過指向urlconf的名稱,動態生成鏈接地址
  • 視圖:使用django.core.urlresolvers.reverse()函數
  • 模板:使用url模板標簽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM