2012-04-28 5 views
1

저는 장고 URL에서 정규식 주위에서 머리를 쓰려고합니다. 나는 현재 로컬에서 개발 중이며 http://localhost:8000/options/items/item-string-1121/과 같은 요청을 'options'이라는 내 응용 프로그램의 'details'보기에 전달하여 요청 문자열의 마지막 번호 부분 (1121)을 매개 변수로 전달 ' id '를 view 함수에 추가합니다.장고 URL 정규식이 작동하지 않습니다.

기본적으로 ID = 1을 고려하여 다음과 같이 options/views.py에 대한 자세한 내용은 서명이 : 나는 내 루트 urls.py에 다음 한

def details(request, id=1): 
    ... 

:

... 

urlpatterns += patterns('', 
    url(r'^options/, include(options.urls')), 
) 

및 옵션에 /urls.py :

urlpatterns = patterns('options.views', 
    url(r'^items/(.+)(P<id>\d+)/$', 'details'), 
    ... 
) 

위의 URL을 요청하려고하면 dev 서버가 다시 일치를 시도했다고 말합니다. st 패턴 ^options/ ^items/(.+)(P<id>\d+)/$하지만 일치하지 않습니다.

누구든지 문제를 볼 수 있습니까?

+0

이름 그룹, 'R'^ 항목을 캡처가 필요하지 않습니다 /.+-(? P \ d +)/$ ''괜찮습니다. – okm

답변

3

(. +)에 욕심이 많지 않은 한정 기호가 필요하므로 r '항목/(. +?) (P \ d +)/$'이 필요합니다. 그렇지 않으면 첫 번째 글로브가 문자열의 끝까지 행복하게 먹어 ID와 일치하지 않게됩니다.

+0

의미가 있지만 여전히 일치하지 않습니다. 나는 방금 404를 얻습니다. – JimJay

+0

아, 그게 (? P ) 더 중요한 것 :-)이되어야합니다. – coderanger

+0

오케이. 둘째 ? 하지만 감사합니다! :) – JimJay

0

인용문이 누락되었습니다.

urlpatterns += patterns('', 
    url(r'^options/, include(options.urls')), 
) 

나는 당신의 표현의도 확실하지 않다

urlpatterns += patterns('', 
    url(r'^options/', include('options.urls')), 
) 

될 경우,이 시도 할 수 있습니다 :

urlpatterns = patterns('options.views', 
    url(r'^items/(?<=-)(?P<id>\d+)/$', 'details'), 
    ... 
) 
+0

)로 시작합니다.'/'와'(? P ...) '사이의 부분은 일치하지 않습니다. 전체에 대한 일치 없음 – okm

관련 문제