2009-11-09 2 views
0

Я только начал Django и Python, так что я все еще новичок в этом .. Это мой urls.py:Slug поле следуют URL

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

Проблема заключается в том, что, когда я пытаюсь сделать, чтобы URL : slug/delete/он ищет эту часть slug/delete/as slug. Когда я удаляю $ в 1-м URL-адресе, он не переходит к представлению person_delete, а переходит в представление person_detail, игнорируя/delete/part Любые идеи?

ответ

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

+0

@AKX - спасибо. Отредактировано тем, что я * думаю * может быть проблемой. –

1

Как о чем-то вроде

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

, чтобы убедиться, что пуля не может содержать косую черту? Вы также можете попробовать иметь правила в обратном порядке, чтобы сначала выполнить Django /.../delete/.

+0

'[- \ w] +' не будет соответствовать символу '/'. '\ w' является синонимом' [a-zA-Z0-9_] ', а' -' (в начале конца набора) является, ну, тире. – mipadi

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

Порядок адресов в этом случае важен в таких случаях, поскольку адрес отправителя с использованием первого совпадения. Общий URL должен быть последним.

+0

Не в этом случае, поскольку OP завершил свои URL-адреса знаком '$', который соответствует концу строки. – mipadi

+0

К сожалению, я неправильно понял вопрос - я думаю, что он удаляет $ с первого URL-адреса, что вызвало все проблемы. – shiberz

1

Обратите внимание, что тихоход поле может также включать в себя цифру (а не только букву и тир), так что вы хотите изменить его, чтобы сказать что-то вроде:

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

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