Django - URL 의 Reverse 와 Resolve

4471 단어 djangoresolvereverse
DJango 시리즈 의 지난 편 에서 우 리 는 URL 을 어떻게 해석 하고 일치 하 는 지, 그리고 URL 에서 유용 한 정 보 를 추출 하 는 지 에 대해 이야기 했다 (year 와 month 를 예 로 들 었 다).그러나 URL 관 리 는 여전히 거대 한 프로젝트 입 니 다. 정규 표현 식 이 지원 되 더 라 도 엄 청 난 pattern 을 유지 해 야 합 니 다.다른 한편, URL 수의 증 가 는 일치 와 해석 의 정확성 에 대한 시험 을 가 져 올 것 이다.이 편 은 URL 학습 에 깊이 들 어가 Reverse 와 Resolve 를 파악 할 것 입 니 다.1. Reverse 와 Resolve 의 역할 은 특정한 url 맵 에 이름 을 정의 할 수 있 습 니 다. url 이 라 고 부 릅 니 다.name, 이렇게 하면 무슨 소 용이 있 습 니까?그 전에 리 버스 와 Resolve 의 의 미 를 소개 합 니 다. 함수 템 플 릿 은 다음 과 같 습 니 다.# viewname url_name # args , , # : url_name URL reverse(viewname[, urlconf       =       None       , args       =       None       , kwargs       =       None       , current_app       =      None       ])
  # path url # : url url_name resolve(path, urlconf       =       None       )
그럼 어떤 상황 에서 우리 가 그것들 을 써 야 합 니까?첫째, 프로젝트 에 사이트 주 소 를 제시 해 야 한다 면 (예 를 들 어 웹 페이지 재 설정 등) Reverse 함수 에 해당 하 는 url 에 전달 할 수 있 습 니 다.name 및 필요 한 매개 변 수 는 해당 url 을 생 성 합 니 다.둘째, 디 버 깅 단계 에서 Resolve 함 수 를 통 해 사이트 의 URL 대응 관계 가 원 하 는 대로 되 는 지 테스트 할 수 있 습 니 다.
2. 간단 한 예 로 my site / urls. py 를 다음 코드 로 수정 합 니 다.from       django.conf.urls       import       patterns, include, ur
  home       =       'hello.views.home'
  urlpatterns       =       patterns('',            url(r       '^test$'       , home, name       =       "test_hello"       ),            url(r       '(\d{4})/(\d{2})$'       , home, name       =       "test_hello_2"       ), )
사이트 루트 디 렉 터 리 에서 실행: python manage. py 셸 은 Django 가 제공 하 는 셸 환경 에 들 어 갑 니 다. 그리고 다음 명령 을 순서대로 입력 하면 출력 결 과 를 잘 이해 할 수 있 습 니 다.# , xd( ) , from       django.core.urlresolvers       import       reslove, reverse url       =       resolve(       '/2012/10'       ) print       url.url_name                # test_hello_2
  reverse(       'test_hello_2'       ,args       =       (       '2012'       ,       '10'       )) # /2012/10
3. URL Include 의 목적 은 하나의 Project 모듈 이 증가 할 때 루트 디 렉 터 리 에서 하나의 urls. py 만 유지 하여 전체적인 URL 대응 관 계 를 관리 하 는 것 이 적절 하지 않 습 니 다.모든 모듈 이 자신 과 관련 된 URL 을 관리 할 수 있 고 루트 디 렉 터 리 에 있 는 urls. py 는 그것들 을 모두 포함 시 키 는 것 만 책임 지면 문 제 를 해결 하지 않 습 니까?이것 은 약간 C / C + + 안의 파일 개념 같다.URL Include 템 플 릿 은 다음 과 같 습 니 다.# regex # URL_FILE_NAME urls.py url(regex, include(       'URL_FILE_NAME'       ))
4: Include 의 예 는 hello 파일 에서 urls. py 를 새로 만 듭 니 다. 다음 과 같 습 니 다.from       django.conf.urls       import       patterns, include, url
  home       =       'home'
  urlpatterns       =       patterns('',            url(r       '^$'       , home), )
그리고 mysite / urls. py 를 수정 하고 다음 줄 을 추가 하면 됩 니 다.url(r       '^'       , include(       'hello.urls'       )),
현재 python manage. py runserver 를 통 해 서버 를 시작 합 니 다. 사이트 주소 에 localhost: 8000 을 입력 하면 정상 으로 표시 되 지 않 습 니까?정상 이 라면 우리 include 가 성공 했다 는 뜻 이다.
알 아 차 렸 는 지 모 르 겠 습 니 다. my site / urls. py 의 정규 표현 식 에는 $가 없습니다.원래 include 의 용법 에서 하위 모듈 의 urls 를 맞 추 려 면 먼저 부모 모듈 의 매 칭 을 통 해 예 를 들 어 my site / urls. py 의 매 칭 이 '^ t' 라면 include 에 전 달 될 때 t 이후 부터 시작 합 니 다!

좋은 웹페이지 즐겨찾기