2010-03-02 4 views
4

나는이 유사한 구조를 구현해야합니다 example.com/folder1/folder2/folder3/../view장고 URL - 깨끗한 URL을 통해 항목 목록을 전달하는 방법

의 깊이 (다른 대신 "보기"의 ​​끝에 가지가있을 수 있습니다) 이 구조는 알려지지 않았으며 나무 깊숙히 묻혀있는 폴더가있을 수 있습니다. 정확한 URL 패턴을 얻는 것이 중요합니다. 예를 들어 example.com/folder_id

Django URL 발송자로 구현하는 방법에 대한 아이디어가 있으십니까?

답변

5

Django의 URL 발송자는 정규식을 기반으로하므로 원하는 경로 (반복 그룹 포함)와 일치하는 정규식을 제공 할 수 있습니다. 그러나 django의 url 디스패처를 여러 하위 그룹 (매개 변수로 마지막 일치 만 반환 함)과 일치시킬 수있는 방법을 찾을 수 없으므로 일부 매개 변수 처리가보기에 남아 있습니다.

urlpatterns = patterns('', 
    #... 
    (r'^(?P<foldersPath>(?:\w+/)+)(?P<action>\w+)', 'views.folder'), 
) 

첫번째 파라미터에서는 비 캡처 그룹이 "/"뒤에 "단어"문자를 반복하는 : 여기

은 예시 URL 패턴이다. 아마도 \ w를 알파벳과 숫자 이외의 다른 문자를 포함하도록 다른 것으로 변경하고 싶을 것입니다. ,

urlpatterns = patterns('', 
    #... 
    (r'^(?P<foldersPath>(?:\w+/)+)view', 'views.folder_View'), 
    (r'^(?P<foldersPath>(?:\w+/)+)delete', 'views.folder_delete'), 
) 

과 뷰 :

당신은 물론 대신에 (당신이 제한된 작업이있는 경우 더 의미) 액션 PARAM를 사용하는 URL 구성에서 여러 뷰를 변경할 수 있습니다

def folder(request, foldersPath, action): 
    folders = foldersPath.split("/")[:-1] 
    print "folders:", folders, "action:", action 
    #... 
+0

은 그냥 중복 발견 http://stackoverflow.com/questions/249110/django-arbitrary-number-of-unnamed-urls-py-parameters : 우리는 폴더의 배열을 얻기 위해 첫 번째 매개 변수를 분할 ,하지만 아마도 누군가가 regexp를 유용하게 사용할 수 있습니다. –

+0

고마워요. 불행히도 내 질문을 게시 할 때이 파일을 찾을 수 없습니다. 정규 표현식은 훌륭합니다. – letoosh