Slug字段后跟url

时间:2009-11-09 13:26:22

标签: django django-urls url

我刚开始使用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  有什么想法吗?

4 个答案:

答案 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'),

在这种情况下,网址顺序很重要,因为网址调度程序使用的是第一次匹配。普通网址应该是最后一个。