2012-02-27 166 views
9

我有這樣的URL配置和做工精細而以斜線:追加斜槓不工作

urlpatterns = patterns('', url(r'^allvideo/$','my.views.allvideo')) 

即使

它給我的屬性錯誤「訪問‘STR’對象有沒有屬性「解決」「,當請求是與缺少的尾部斜槓

任何想法??

+0

你有沒有['django.middleware.common.CommonMiddleware'](https://docs.djangoproject.com/en/dev/ref/settings/#append-slash),安裝在你的'MIDDLEWARE_CLASSES'中? – 2012-02-27 10:27:12

+0

是的,commonMiddleware是 – user1170364 2012-02-27 10:28:41

+0

你可以發佈回溯? – jpic 2012-02-27 11:57:32

回答

0

不知道什麼是根本原因,但這些可以幫助你去解決它或它縮小:

(1)您是否嘗試過或者使用實際的視圖函數作爲參數(而不是一串):

from my.views import allvideo 
urlpatterns = patterns('', url(r'^allvideo/$',allvideo)) 

(2)或使用URL功能跳過:

urlpatterns = patterns('', (r'^allvideo/$','my.views.allvideo')) 
+0

thn didn work :( – user1170364 2012-02-28 06:56:03

14

APPEND_SLASH不是無條件地發生 - 它只是生效如果在嘗試所有現有的URL後模式(和相關的視圖,如果匹配的話),Django即將返回一個404.

如果是這樣,並且原始請求在末尾沒有斜線,那麼Django會檢查是否有任何網址格式會與尾部的斜線匹配。如果是這樣,它會發出HTTP重定向。

如果你的任何URL模式匹配原始請求(沒有斜槓),那麼Django會先嚐試一個。如果這引發了一個例外,那麼你會看到它(我懷疑這是發生了什麼)。 Django永遠不會發出重定向。

+1

它的工作正常與尾部斜槓,因爲我在我的問題中提到... prb只發生尾部斜線丟失時 – user1170364 2012-02-28 06:55:23

+1

也許隨着尾部斜槓刪除,它匹配* *不同* url模式你在期待 – 2012-02-28 14:38:10

3

這一定會解決您的問題。你可以提供帶有或不帶尾隨斜線的URL,它會給你相同的結果。

在網址的文件,

urlpatterns = patterns('', url(r'^allvideo/?$','my.views.allvideo')) 

最後的斜線後面添加問號。 當你輸入一個url時,它將首先檢查結尾的斜線,或者它將匹配它而沒有結尾的斜線,並且在任何情況下都會給你相同的響應。希望這對你有一些幫助。快樂編碼。

+1

我認爲這是最好的解決方案 – 2013-01-19 03:34:43

+8

不是因爲你會在同一個頁面上有兩個網址 – Natim 2013-05-02 08:17:58

+2

就像@Natim所說的,只是增加一些上下文:SEO對於兩個URL而不是一個網址是不利的。此外,你不應該圍繞一個本來已經有解決方案的框架編寫代碼。 – Jamey 2014-08-13 17:27:08

0

即使看起來令人難以置信,我也遇到同樣的問題,只需重新啓動開發服務器即可解決問題。只需要記住:

python manage.py runserver 
3

如果您添加了一些自己的中間件,那麼中間件的順序很重要。我有一個類似的情況,斜線在之前工作,並添加中間件項目打破了它。切換訂單後,所有事情再次開始工作。

+1

對我來說,這是通過確保CommonMiddleware低於LocaleMiddleware來解決的。 – 2015-05-21 14:48:22