2009-11-09 46 views
0

我剛開始Django和Python的,所以我還在新本.. 這是我的urls.py:彈頭場其次網址

url(r'(?P<slug>[-\w]+)/$','person_detail'), 
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'), 

的問題是,當我嘗試做的url :slug/delete /它正在尋找整個部分slug/delete /作爲slu。。當我在第一URL刪除$它不走的person_delete視圖,但去了person_detail觀點,忽略/刪除/部分 任何想法?

回答

6

嘗試添加領先^

url(r'^(?P<slug>[-\w]+)/$','person_detail'), 
url(r'^(?P<slug>[-\w]+)/delete/$','person_delete'), 

也就是說,如果沒有領先的^我期望foo/delete/讓你的person_detail觀點與slug作爲delete,而不是foo/delete

+1

當 - 是一個字符類的第一個字符,它並不表示一個範圍,而是一個文字 - 。 – AKX 2009-11-09 13:44:15

+0

@AKX - 謝謝。用我認爲可能是問題的編輯。 – 2009-11-09 14:26:23

1

如何像

url(r'(?P<slug>[^/]+)/$','person_detail'), 
url(r'(?P<slug>[^/]+)/delete/$','person_delete'), 

確保蛞蝓無法包含斜槓?你也可以嘗試按照相反的順序制定規則,試着讓Django首先匹配/.../delete/。

+0

'[ - \ w] +'也不會匹配'/'。 '\ w'是'[a-zA-Z0-9_]'的同義詞,而'-'(在一個集合的結尾處)是一個破折號。 – mipadi 2009-11-09 14:28:00

0
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'), 
url(r'(?P<slug>[-\w]+)/','person_detail'), 

在這種情況下,Url命令很重要,因爲url dispacher使用第一個匹配。常用網址應該是最後一個。

+0

不是在這種情況下,因爲OP用'$'符號結束了他的URL,符號與字符串的末尾匹配。 – mipadi 2009-11-09 14:26:35

+0

哎呀..我誤解了問題 - 我認爲他從第一個網址,導致所有的煩惱刪除$。 – shiberz 2009-11-09 14:32:45

1

注意,一決高下領域可能還包括數字(不只是字母和破折號),所以要改變它這樣說:

SLUG = '(?P<slug>[\w\d-]+)' 

url(r'^'+SLUG+'/delete$', delete_method, {}, 'delete_url_name')