2010-06-28 4 views
0

내 프로젝트의 대부분의보기는 선택적 username 매개 변수를 허용하고 존재하는 경우 해당 사용자의 템플릿에 전달 된 쿼리 세트를 필터링합니다. 따라서, 예를 들어 :DRYness에 대한 Django URL 구성

인덱스보기 모두 다음과 같은 URL 패턴 처리 : 이러한 응용 프로그램의 숫자가 따라

'^$' # general index page 
'^(?P<username>[-\w]+)/$' # index page for the user 

'^photos/$' # photo index page 
'^(?P<username>[-\w]+)/photos/$' # photos for that user 
... 

,을 복제하여 동일한 로직을 구현하는 것은 매우 건조하지 않는 것 패턴. 나는 반복적으로 주요 urls.py 모듈을 포함하는 것이 가능하다 생각했다, 그래서 나는 이런 짓을 :

url(r'^(?P<username>[-\w]+)/', include('urls')), 

내 추론이 다른 URL이 모듈이 포함되어있는 경우, 일치하는 패턴이 경로에서 제거이었다. 그래서, 나는 그것이 여분의 사용자 이름 매개 변수는 재귀 적으로 포함 된 URL을 모듈에 의해 일치 할 때

'^(?P<username>[-\w]+)/photos/$' 

'^photos/$' 

될 것이라고 기대했다. 그러나 이로 인해 요청이있을 때 개발 서버가 자동으로 종료되었습니다.

내가 생각할 수있는 두 번째 방법은 존재하는 경우 URL의 패턴과 일치하는 미들웨어를 작성하고 요청한 사용자를 요청에 추가하고 요청 경로에서 사용자 이름과 일치하는 부분을 제거하는 것입니다. 하지만 예측할 수없는 결과가있을 수 있으므로 경로를 망치고 싶지는 않습니다.

무엇을 권하고 싶습니까? 나는 DRYness에 너무 까다 롭습니까?

감사합니다, OMAT

답변

1

그냥 같은 파일에 문자열로 정규식을 정의하고 이미 문자열 연결을 사용!

user_regex = r"^(?P<username>[-\w]+)/" 

그럼 당신은 당신이 한 번만 정의 된 정규식, 매우 건조를 유지하는 것이 매우 정규식 '%s/photos$'%user_regex 할 수 있습니다.

Altho ', urls.py 패턴을 URL 태그 에 포함시킨 이유는이며 그 이유가 확실하지 않습니다. 아마도 다른 오류일까요?

+0

덕분에 더 깨끗한 패턴을 얻을 수 있지만 실제로는 각 응용 프로그램에 포함 된 urls.py 파일이 있습니다. 따라서 각 응용 프로그램에 대해 모든 패턴은 자신의 urls.py에 사용자 이름과 일치하는 대안으로 복제되어야합니다. – omat

+0

반복과 달리 앱 URL은'(r '^ photo /', include ('photos.urls'))'로 포함되기 때문에 사용자 사진의 URL은'/ photo/[username] /'이됩니다. – omat