期初用django 開發應用的時候,完全是在urls.py 中硬編碼配置位址,在views.py中httpresponseredirect()也是硬編碼轉向位址,當然在template 中也是一樣了,這樣帶來乙個問題,如果在urls.py 中修改了某個頁面的位址,那麼所有的地方(views.py和template中)都要修改。如果是個很大的工程,那麼要修改的地方就很多。當然,你也許會選擇乙個工具,直接查詢替換來實現。除此之外呢.....
其實django 本身就提供了這個功能,就是 url 標籤,利用 django 的 url 標籤來實現這樣的功能,在這個模組中:django/conf/urls/defaults
利用url 標籤之後,不管urlpatterns裡的某個位址叫法怎麼改變,templates裡的位址都不用修改了。在模版中呼叫url標籤的時候,需要:
比如沒有採用url函式的時候:
urlpatterns裡定義了資訊的首頁位址,
urlpatterns = patterns('',
(r'^article$
','news_index'),
)
templates裡的html為
資訊
urlpatterns = patterns('',
(r'^news$
','news_index'),
)
你會發現,你在templates中得修改10個資訊成資訊
可恨的是那樣的標籤分布在不同的頁面上,有更糟糕的時候就是 你不知道到底有多少個那樣的a標籤(總不能乙個個數嘛)。
有了url情況就大為不一樣了,
urlpatterns裡定義了資訊的首頁位址,
urlpatterns = patterns('',
url(r
'^article$
','news_index
' ,name="
news_index"),
)
templates裡的html為
"">資訊
url(r'^article$
','news_index
' ,name="
news_index
"),
templates裡 這樣使用
位址鏈結就能使用了。注意的是name是全域性的,你整個urlpatterns裡只能乙個唯一的name,這個道理應該好理解,就像**的位址也是唯一性的。
templates裡的用法簡單,在views裡怎麼用呢?以前在沒有使用的url函式的時候,可能指向乙個位址使用
當然urlpatterns改變位址叫法的時候,所用的views的指向函式的引數都得跟著變。有了url函式,變成:
好處和template裡使用的情形一樣的。
當遇到urlpatterns的位址包含有引數的時候,如:
(r'^(?p\d)/(?p\d)/$
','news_list
' ),
有兩個引數,最終的位址如歸檔的位址
情況變複雜點了,urlpatterns的以上的用法不變:
url(r'^(?p\d)/(?p\d)/$
','news_list
',name="
news_archive
" ),
templates裡的用法就需要改改了,我們把url看成乙個方法,結合templates的語法,結果就出來了:
"">2023年02月
或者這樣:
"">2023年02月
當然,在你後台的views.py 中的方法上也必須有這兩個引數,比如
defnews_list(request,year,month):
'year:
',year
'monty:
',month
......
後面的2010, 02 就是引數了,引數之間用逗號隔開,多少個引數用法都一樣的。當然,2010 02 引數是某個實體獲得的,具體的情況具體分析。而在views呢,有了引數怎麼寫,萬變不離宗
from django.core.urlresolvers importreverse
......
reverse(
"news_archive
",kwargs=)
比如: return httpresponseredirect(reverse("news_archive",kwargs=))
即可,最後解析出來的位址為「/2010/02」。
由此看出,在用 django開發應用的時候,url 標籤是個很靈活的東西,應該多用,也為以後維護帶來方便。
Django學習筆記之url路由
一 django中路由的作用 其本質是url與該url要呼叫的檢視函式之間的對映,就是為告訴django對客戶端發過來的某個url應該呼叫執行哪一段邏輯 二 路由基本的配置 from django.conf.urls import url urlpatterns必須是乙個由url 例項組成的pyth...
Django學習筆記之url路由及模板渲染方式
1.在專案目錄下urls.py檔案 2.在專案目錄建立了乙個views.py檔案 path 基本規則 path test views.test 使用尖括號 從url中捕獲值。包含乙個轉化器型別 converter type 沒有轉化器,將匹配任何字串,當然也包括了 字元 預設支援的轉換器 str,匹...
django學習筆記011 捕獲url引數
前面我們講到,django的mvt框架,在urls.py裡面利用正規表示式對http請求的url進行匹配,但是如何獲得http請求裡面的傳送的引數呢?利用正規表示式的分組進行獲取引數 url r books d views.detail d 為正規表示式裡面的組 獲取位置的引數,並傳給view裡面的...