2009-11-09 41 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')