NoReverseMatch по адресу / stocks / 5 /

-1

Функция обратной записи Django, по-видимому, не в состоянии разрешить мой URL.

Вот мой urls.py содержащий URL-адреса

urlpatterns=[
    url(r'^login/$', views.loginview, name='login'),
    url(r'logout/$', views.logoutview, name='logout'),
    url(r'signup/$', views.signup, name='signup'),
    url(r'^stocks/(?P<pk>[0-9])/$', views.successful_login, name='successful_login'),
    url(r'^buystocks/(?P<pk>[0-9])/(?P<sn>[A-Z])/buy/$', views.buy, name='buy')
]

Ниже приведен фрагмент, содержащий перенаправление URL.

<form method="post" action="{% url 'buy' pk=user.id sn=stock.stock_name %}" >

След назад приведен ниже

NoReverseMatch at /stocks/5/
Reverse for 'buy' with keyword arguments '{u'pk': 5, u'sn': u'HDFC'}' not found. 1 pattern(s) tried: ['buystocks/(?P<pk>[0-9])/(?P<sn>[A-Z])/buy/$']
  • 0
    Ваш pk в диапазоне 0-9? Ваше текущее регулярное выражение не поддерживает числа за 9, вы должны добавить + после [0-9]
  • 1
    Да, они находятся сейчас в диапазоне 0-9, но все же я добавлю + Спасибо за указание на это.
Теги:
django-templates
django-urls

1 ответ

3
Лучший ответ

В ваших регулярных выражениях есть небольшая проблема, и они соответствуют только 1-символьным значениям. Взгляните на них еще раз:

 (?P<pk>[0-9])/(?P<sn>[A-Z])

Без суеты:

  [0-9]/[A-Z]

Вам нужно добавить + после регулярного выражения, чтобы устранить проблему. то есть:

 (?P<pk>[0-9]+)/(?P<sn>[A-Z]+)

+ означает, что перед ним или группой должен появляться один или несколько раз. например:

Соответствует, A A+ соответствует A, AA, AAA ,... но не пустая строка. A* соответствует пустой строке в дополнение ко всему, что соответствует A+.

Более обобщенная версия * и + является оператором {m, n} который устанавливает верхнюю и нижнюю границу числа повторений. При этом обозначении A{2,4} только AA, AAA и AAAA. A+ и A* можно переписать как A{1,} и A{0,} соответственно. Заметим, что исключение верхней границы приводит к отсутствию верхней границы (другими словами, верхняя граница - бесконечность)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню