2017-09-04 1 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'가 0-9 범위입니까? 귀하의 현재 정규식은 숫자 beyound 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가 한 번 이상 표시 할 필요가 앞의 것을 의미한다. 예컨대 :

A 경기 A, A+ 경기 A, AA, AAA ...하지만 빈 문자열. A*A+과 일치하는 모든 항목 외에도 빈 문자열과 일치합니다.

더 일반화 된 버전 *+은 반복 횟수의 상한 및 하한을 설정하는 연산자입니다. 이 표기법을 사용하면 A{2,4}AA, AAAAAAA과 일치합니다. A+A*은 각각 A{1,}A{0,}으로 다시 쓸 수 있습니다. 상한을 생략하면 결과가 상한이되지 않습니다 (즉, 상한이 무한대 임).