2015-10-14 82 views
0

我想知道爲什麼這些網址互相沖突。Django。爲什麼這些Url衝突?

urls.py:

url(r'^editar_perfil/$', views.editar_perfil, name="editar_perfil"), 

url(r'^(?P<username>[-\w.]+)/$', views.perfil_usuario, name="perfil_usuario"), 
url(r'^leyendo_libro_ajax/$', views.leyendo_libro_ajax, name="leyendo_libro_ajax"), 

所以,如果我把網址一樣,我不能去命名leyendo_libro_ajax的URL,它進入所謂perfil_usuario的URL。但是如果我嘗試轉到url editar_perfil(第一個),它正確登錄editar_perfil視圖。爲什麼?如果這不是一個錯誤,請幫助我理解。

+1

您需要向我們展示如何在模板中對網址進行編碼。 –

+1

我認爲,如果您將perfil_usuario網址傳遞到以下leyendo_libro_ajax,它應該可以工作。 –

+0

knbk的回答是正確的。但是,在附註中,' - \ w,'相當於'.' - 如果你想匹配正則表達式中的點,你必須像這樣轉義它:' - \ w \ .' – karthikr

回答

3

Django按照定義的順序嘗試每個模式,並返回url匹配正則表達式的第一個視圖。最後一個視圖的網址/leyendo_libro_ajax/也與您的perfil_usuario視圖的正則表達式匹配。因爲這是第一場比賽,所以這是Django使用的觀點。

要讓這些觀點並存,你需要移動的最後一個視圖了第二種觀點之上:

url(r'^editar_perfil/$', views.editar_perfil, name="editar_perfil"), 
url(r'^leyendo_libro_ajax/$', views.leyendo_libro_ajax, name="leyendo_libro_ajax"), 
url(r'^(?P<username>[-\w.]+)/$', views.perfil_usuario, name="perfil_usuario"), 

這樣,editar_perfilleyendo_libro_ajax將永遠是他們各自的URL的第一場比賽,但其他任何url將仍然匹配perfil_usuario的正則表達式。

+0

謝謝爲答案。 – alejoss