/stocks/5/ 处的 NoReverseMatch
NoReverseMatch at /stocks/5/
Django 的反向功能显然无法解析我的 URL。
这是我的 urls.py
包含网址
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+
匹配 A
,AA
,AAA
,...但不是空字符串。
A*
除了 A+
匹配的所有内容之外还匹配一个空字符串。
*
和 +
的更通用版本是 {m, n}
运算符,它设置重复次数的上限和下限。使用该符号 A{2,4}
仅匹配 AA
、AAA
和 AAAA
。 A+
和A*
可以分别重写为A{1,}
和A{0,}
。请注意,省略上限会导致没有上限(换句话说,上限为无穷大)
Django 的反向功能显然无法解析我的 URL。
这是我的 urls.py
包含网址
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+
匹配 A
,AA
,AAA
,...但不是空字符串。
A*
除了 A+
匹配的所有内容之外还匹配一个空字符串。
*
和 +
的更通用版本是 {m, n}
运算符,它设置重复次数的上限和下限。使用该符号 A{2,4}
仅匹配 AA
、AAA
和 AAAA
。 A+
和A*
可以分别重写为A{1,}
和A{0,}
。请注意,省略上限会导致没有上限(换句话说,上限为无穷大)