1. 程式人生 > >django頁面沒反應/一直處於載入中/請求成功卻不跳轉:兩種常見情況

django頁面沒反應/一直處於載入中/請求成功卻不跳轉:兩種常見情況

使用Django的時候,頁面請求正常,也沒有報任何錯誤,甚至連警告都沒有的情況下,頁面卻還是原地不動或者閃一下或者無限顯示載入動畫的情況適用本文。

這個問題描述比較籠統,但根據我目前遇到過兩種情況來看,似乎都比較重要而且實用,所以打算分別講述一下。

第一種:URL配置錯誤

頁面閃一下,卻原地不動,可能是這種情況。

例如有以下兩個URL:

     url(r'^foo/bar/', User.obama),
     url(r'^foo/bar/trump/', User.trump),
你會發現所有從foo/bar/到foo/bar/trump/的請求都毫無作用,但各種偵錯程式檢視器伺服器控制檯等都告訴你“200”,一切正常。

新學Django的朋友很可能犯這個錯誤。

歸根結底其實也很可笑,就是正則表示式使用不正確:r'^   '是一個只限定了開頭的正則表示式,沒有限制結尾,所以一切以foo/bar/開頭的URL都會在Django演算法的作用下直接開啟foo/bar/,而如果位址列已經是foo/bar/的話,自然是“原地不動”了。毫無疑問,Django的演算法是一旦找到一個匹配結果就立馬顯示,這的確是高效的,不需要去遍歷所有的URL,但這也產生了以上問題。

解決方案:

     url(r'^foo/bar/$', User.obama),
     url(r'^foo/bar'/trump/', User.trump),

加上結束符號“$”,則Django就必須完全匹配方能跳轉,則網頁執行正常。

第二種:新頁面的渲染過程中出現了“不可描述的錯誤”

我們知道,一旦Django或者Python程式碼出錯,則會立刻反映到頁面上,導致程式終止。但是寫過前端的朋友一定清楚,無論是JS還是html還是css,都是非常“包容”的語言。簡單來說:一點小錯,無傷大雅;滿篇錯誤,照樣執行。如果不在除錯環境下執行,那麼任何錯誤百出的html頁面都能“硬著頭皮”執行下去。這一點也毫無疑問是有好有壞,好處自不必說,這讓前端頁面有了極高的容錯率和相容性,這簡直是安身立命之本。但是壞處就是,一旦需要載入的頁面出現了某些“致命”錯誤,也不會有報錯資訊,而是會導致頁面莫名其妙地載入或者乾脆“消失”。

解決這個問題的方法自然也很簡單:完全模擬你要載入的頁面(精確到每一個引數,每一個符號),然後在除錯環境下獨立開啟,看看會不會出現一些致命的錯誤,如果沒有,就人工檢查一下。錯誤自然會出現。

然後根據錯誤去修復即可。

下面我舉一個我自己遇到的錯誤案例:

在新頁面中,我需要利用django的模板傳值,宣告一個新的變數:

var foo={{  bar|safe }}
但是傳過來的{{  bar|safe }} 卻是一個含有逗號的字串,且不慎忽略掉了兩邊的引號,結果毫無疑問,這導致了一個致命的錯誤,頁面長時間處於載入狀態,但是毫無動靜。

解決方案:正確傳值或即可。

如果你的情況類似於這個案例,移步:http://blog.csdn.net/pluschang/article/details/78425523