本篇主要是介紹django開發web項目是,url路徑跳轉的問題。比如說你正在做一個web項目,有許多頁面,而這些頁面之間必然要相互跳轉,這是後就出現問題了。如何在模板頁面寫這些路徑呢?是用相對那個路徑“../../you_url/”嗎?還是用絕對路徑“呢?看下文。
工具/原料
假設你已經搭設好了django的開發環境,沒有搭建好的話先搭建環境。
火狐,IE,谷歌瀏覽器一個。
方法/步驟
直接寫上相對路基會出現下面的情況:點擊首頁一次的路徑:“http://localhost:8000/login_again/”
,在點擊一次:“http://localhost:8000//login_again/”,點擊第三次:
“http://localhost:8000///login_again/”看見了嗎,login_again前面的“/"在增加,這就是寫相對路徑惹來的後果。其實我是想在點擊首頁是無論在哪一個頁面點擊,路徑都是”http://localhost:8000/login_again/“,之所以出現這樣的問題是因為寫了相對路徑“../../”之內的。如果你點擊了某個頁面”http://localhost:8000/params/1/2/3/4/“,在這個路徑下你在點擊首頁,假設首頁的url配置是:”url(r'^login_again/$',login_again),“,這是就會出現找不到路徑的問題。你過你想找到路徑,那你必須在點擊首頁時調到出去,就需要一直寫”../../../../../“5個才能調到”這是跟上你的“login_again”才能正確請求。但是每個頁面的情況不可能都完全一模一樣,到底要跳轉幾次,寫幾次“../”呢?在jsp頁面有有一個basePath的,我想在django中有沒有類似的,這樣的話每次就不用那麼麻煩了,直接在"<%=basePath%>"後面加上你要請求的URL就行。
經過看文檔找到了這個標籤:模板中的url標籤。寫法為“{% url 'path.to.some_view' v1 v2 %}”,v1,v2為some_view方面的參數,some_view就是處理你請求的方法名。這樣的話就可以在模板頁面獲取主機路徑如“;相當於jsp中的bsaePath。後面跟上您要處理的方法名即可,儘量寫全你方法所在的模塊的全路徑。
url標籤還有另一種寫法:{% url 'path.to.view' arg arg2 as the_url %},相當於重命名,然後你在需要的地方{{the_url}}就可以引用上面的路徑。
這裡有一個小問題要注意一下:url標籤不接受不帶參數的方法,我親測沒有參數的方法一直報錯,然後加了一個沒有時間意義的參數就報錯,正常運行。如果你有一個沒帶參數的方法,想在url標籤中引用它,那麼認為把這個無參數的方法變成帶一個無用參數的方法,這先在傳值時任意指定一個參數即可運行。
如下面這是我寫的一個登出的url:"{% url 'exam_platform.views.loginOutOut' 1 %}"後面的參數”1“是沒有意義的。loginOutOut函數定義 def loginOutOut(req,nothing):pass。
總之一個句話:個人感覺url就相當於jsp中定義的"basePath",就這樣用,多個頁面跳轉是才沒有問題。