Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Slug字段后跟url_Django_Django Urls_Url - Fatal编程技术网

Django Slug字段后跟url

Django Slug字段后跟url,django,django-urls,url,Django,Django Urls,Url,我刚开始学习Django和Python,所以我对这方面还是新手。。 这是我的URL.py: url(r'(?P<slug>[-\w]+)/$','person_detail'), url(r'(?P<slug>[-\w]+)/delete/$','person_delete'), url(r'(?P[-\w]+)/$,'person\u detail'), url(r'(?P[-\w]+)/delete/$,'person_delete'), 问题是,当我尝试对url

我刚开始学习Django和Python,所以我对这方面还是新手。。 这是我的URL.py:

url(r'(?P<slug>[-\w]+)/$','person_detail'),
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'),
url(r'(?P[-\w]+)/$,'person\u detail'),
url(r'(?P[-\w]+)/delete/$,'person_delete'),
问题是,当我尝试对url执行以下操作时:slug/delete/它正在寻找整个slug/delete/作为slug。当我删除第一个url中的$时,它不会转到person\u delete视图,而是转到person\u细节视图,忽略/delete/part
有什么想法吗?

尝试添加一个前导的
^

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

这就是说,如果没有前面的
^
,我希望
foo/delete/
可以让您使用
slug
作为
delete
,而不是
foo/delete

查看
person\u详细信息

url(r'(?P<slug>[^/]+)/$','person_detail'),
url(r'(?P<slug>[^/]+)/delete/$','person_delete'),
url(r'(?P[^/]+)/$,'person_detail'),
url(r'(?P[^/]+)/delete/$,'person_delete'),
确保slug不能包含斜杠?您也可以尝试以相反的顺序使用规则,尝试让Django匹配/../delete/first。

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

在这种情况下,Url顺序很重要,因为Url dispatcher使用第一个匹配项。公共url应该是最后一个。

注意,slug字段可能还包括数字(不仅仅是字母和破折号),因此您希望将其更改为类似以下内容:

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

url(r'^'+SLUG+'/delete$', delete_method, {}, 'delete_url_name')
SLUG='(?P[\w\d-]+)
url(r'^'+SLUG+'/delete$',delete_方法,{},'delete_url_名称')

When-是字符类的第一个字符,它不表示范围,而是一个文本-。@AKX-谢谢。使用我认为可能是问题所在的内容进行编辑。在本例中不是这样,因为OP以
$
符号结束其URL,该符号与字符串的结尾相匹配。Oops。。我误解了这个问题-我认为他从第一个url中删除了$,这造成了所有的麻烦。
[-\w]+
也不会匹配
/
\w
[a-zA-Z0-9\]
的同义词,
-
(在集合末尾的开头)是破折号。