2017-09-04 104 views
-1

這裏是我的urls.py:NoReverseMatch在/股票/ 5/

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') 
] 

這是我從模板片段:

<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's是否在0-9範圍內?你目前的正則表達式不支持數字9,你應該在'[0-9]'後面加一個'+' –

+1

是的,他們現在在0-9範圍內,但是我仍然會添加一個'+'。謝謝爲了指出這一點。 –

回答

3

正則表達式中存在一個小問題,那就是它們只與1個字符的值匹配。再看看他們:

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

沒有大驚小怪:

[0-9]/[A-Z] 

您需要的正則表達式後添加+來解決這個問題。即:

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

+指該基團或charachter前述它必須出現一次或多次。 e.g:

A比賽AA+比賽AAAAAA,...但不是一個空字符串。 A*A+匹配的所有內容都匹配空字符串。

*+的更一般化版本是{m, n}運算符,它爲重複次數設置了上限和下限。用該符號A{2,4}只匹配AA,AAAAAAAA+A*可分別改寫爲A{1,}A{0,}。請注意,忽略上限導致沒有上限(換句話說,上限爲無窮大)