Django開發學習之URL的反向解析

2021-10-07 03:32:55 字數 1662 閱讀 7361

在使用django 專案時,乙個常見的需求是獲得url 的最終形式,以用於嵌入到生成的內容中(檢視中和顯示給使用者的url等)或者用於處理伺服器端的導航(重定向等)。

人們強烈希望不要硬編碼這些url(費力、不可擴充套件且容易產生錯誤)或者設計一種與urlconf 毫不相關的專門的url 生成機制,因為這樣容易導致一定程度上產生過期的url。

換句話講,需要的是乙個dry 機制。除了其它有點,它還允許設計的url 可以自動更新而不用遍歷專案的源**來搜尋並替換過期的url。

獲取乙個url 最開始想到的資訊是處理它檢視的標識(例如名字),查詢正確的url 的其它必要的資訊有檢視引數的型別(位置引數、關鍵字引數)和值。

django 提供乙個辦法是讓url 對映是url 設計唯一的地方。你填充你的urlconf,然後可以雙向使用它:

根據使用者/瀏覽器發起的url 請求,它呼叫正確的django 檢視,並從url 中提取它的引數需要的值。

根據django 檢視的標識和將要傳遞給它的引數的值,獲取與之關聯的url。

第一種方式是我們在前面的章節中一直討論的用法。第二種方式叫做反向解析url、反向url 匹配、反向url 查詢或者簡單的url 反查。

在需要url 的地方,對於不同層級,django 提供不同的工具用於url 反查:

在模板中:使用url 模板標籤。

在python **中:使用django.core.urlresolvers.reverse() 函式。

from django.conf.urls import url

from

.import views

urlpatterns =

[#...

url(r'^articles/([0-9])/$'

, views.year_archive, name=

'news-year-archive'),

#...

]

根據這裡的設計,某一年nnnn對應的歸檔的url是/articles/nnnn/。

你可以在模板的**中使用下面的方法獲得它們:

"">

2012 archive<

/a>

"">

} archive<

/a>

<

/li>

<

/ul>

在python **中,這樣使用:

)如果出於某種原因決定按年歸檔文章發布的url應該調整一下,那麼你將只需要修改urlconf 中的內容。

在某些場景中,乙個檢視是通用的,所以在url 和檢視之間存在多對一的關係。對於這些情況,當反查url 時,只有檢視的名字還不夠。

Django學習筆記之url路由

一 django中路由的作用 其本質是url與該url要呼叫的檢視函式之間的對映,就是為告訴django對客戶端發過來的某個url應該呼叫執行哪一段邏輯 二 路由基本的配置 from django.conf.urls import url urlpatterns必須是乙個由url 例項組成的pyth...

Django學習筆記之URL標籤的使用

期初用django 開發應用的時候,完全是在urls.py 中硬編碼配置位址,在views.py中httpresponseredirect 也是硬編碼轉向位址,當然在template 中也是一樣了,這樣帶來乙個問題,如果在urls.py 中修改了某個頁面的位址,那麼所有的地方 views.py和te...

Django學習 URL方法

index name index 例如 urls.py url r bookinfo d polls views.bookinfo,name book html 中 在django中,url起著連線模板和檢視函式的作用。舉例如下 from django.conf.urls import url fr...