URL-адрес Django не разрешается с параметрами запроса - PullRequest
1 голос
/ 11 августа 2010

У меня проблема с передачей параметров запроса для запроса GET, но Django неправильно разрешает URL для представления.

Мой urls.py выглядит следующим образом:

   from django.conf.urls.defaults import * 
   urlpatterns = patterns('',
       url(r'^confirm_cancel',
          'myapp.views.confirm_cancel_method',
           name='myapp_confirm_cancel'),
       )

Когда я перехожу к / verify_cancel? Some_id = x, я получаю 404, сообщая мне: «Нет совпадений с MyModel».Когда я устанавливаю точку останова в моем обработчике представления, он не срабатывает при переходе по этому URL.

Однако, если я иду в / verify_cancel / x /, моя точка останова просмотра получает удар.* Еще одна вещь, которую стоит отметить, это работало в Django 1.1, но теперь не работает, так как я обновился до 1.2.

Есть мысли?

Спасибо!

Ответы [ 4 ]

1 голос
/ 11 августа 2010

Я скопировал все другие шаблоны URL в urls.py в своем посте.

Оказалось, что проблема заключалась в том, что у меня было r'^(?P<my_id>\w+)/?$' для одного из URL в верхней частиurlpatterns.

В следующий раз я научусь вставлять все, а не черри, выбирая то, что я считаю оскорбительными строками кода.

Странно, что это не привело к поломке Django 1.1... Я думаю, это была ошибка, которая была исправлена ​​в 1.2

1 голос
/ 11 августа 2010

Не думаю, что проблема с твоим URL.Используете ли вы ярлык как get_object_or_4o4 где-то на ваш взгляд?Например:

get_object_or_404(MyModel, pk=99)

приведет к «Нет совпадений MyModel с данным запросом, если в вашей таблице нет записи с первичным ключом 99.

1 голос
/ 11 августа 2010

Нам нужно посмотреть, что находится в соответствующей функции просмотра.

В идеале это должно выглядеть примерно так:

def confirm_cancel_method(request, some_id=None):
    some_id = request.REQUEST.get('some_id', some_id)
    some_record = get_object_or_404(SomeModel, pk=some_id)
    ...

update

Извините, только что увидел вашу заметку о точке останова.Единственное, что я бы порекомендовал, это изменить конфигурацию так:

from django.conf.urls.defaults import * 
urlpatterns = patterns('',
    url(r'^confirm_cancel/?$',
       'myapp.views.confirm_cancel_method',
        name='myapp_confirm_cancel'),
    )

Добавление /?$ в конце означает, что только /confirm_cancel или /confirm_cancel/ будет соответствовать URL.Прямо сейчас, потому что у вас нет конца $, все, что начинается с confirm_cancel, будет совпадать.Исправление шаблона, по крайней мере, решит эту проблему.

0 голосов
/ 11 августа 2010

Вы проверяли, имел ли это место трейлинг слеш ?

...