我刚开始使用Django和Python,所以我还是新手... 这是我的urls.py:
url(r'(?P<slug>[-\w]+)/$','person_detail'),
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'),
问题在于,当我尝试对url执行时:slug / delete /它正在寻找整个部分slug / delete /作为slug。当我删除第一个网址中的$时,它不会转到person_delete视图,而是转到person_detail视图,忽略/ delete / part 有什么想法吗?
答案 0 :(得分: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}}。
答案 1 :(得分:1)
像
这样的东西url(r'(?P<slug>[^/]+)/$','person_detail'),
url(r'(?P<slug>[^/]+)/delete/$','person_delete'),
确保slu can不能包含斜线?您也可以尝试以相反的顺序使用规则,尝试让Django首先匹配/.../delete/。
答案 2 :(得分:1)
请注意,段塞字段也可能包含数字(不仅仅是字母和短划线),因此您需要将其更改为:
SLUG = '(?P<slug>[\w\d-]+)'
url(r'^'+SLUG+'/delete$', delete_method, {}, 'delete_url_name')
答案 3 :(得分:0)
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'),
url(r'(?P<slug>[-\w]+)/','person_detail'),
在这种情况下,网址顺序很重要,因为网址调度程序使用的是第一次匹配。普通网址应该是最后一个。