Функция обратной записи 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/$']
В ваших регулярных выражениях есть небольшая проблема, и они соответствуют только 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,}
соответственно. Заметим, что исключение верхней границы приводит к отсутствию верхней границы (другими словами, верхняя граница - бесконечность)
pk
в диапазоне 0-9? Ваше текущее регулярное выражение не поддерживает числа за 9, вы должны добавить+
после[0-9]
+
Спасибо за указание на это.