Слизняк с последующим URL - PullRequest
       14

Слизняк с последующим URL

0 голосов
/ 09 ноября 2009

Я только начал 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. Когда я удаляю $ в первом URL, он не переходит в представление person_delete, но переходит в представление person_detail, игнорируя часть / delete / part Есть идеи?

Ответы [ 4 ]

6 голосов
/ 09 ноября 2009

Попробуйте добавить ведущий ^:

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

Тем не менее, без ведущего ^ я бы ожидал, что foo/delete/ приведет вас к представлению person_detail с slug как delete, а не foo/delete.

1 голос
/ 10 февраля 2012

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

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

url(r'^'+SLUG+'/delete$', delete_method, {}, 'delete_url_name')
1 голос
/ 09 ноября 2009

Как насчет чего-то вроде

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

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

0 голосов
/ 09 ноября 2009
url(r'(?P<slug>[-\w]+)/delete/$','person_delete'),
url(r'(?P<slug>[-\w]+)/','person_detail'),

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

...