The Definitive Guide To Django 2 학습 노트 (4) 동적 URLs

3762 단어 django
앞의 예에서 시간은 동적으로 변할 수 있지만 URL은 정적 (/time/) 이다.URL도 동적으로 바뀌어 통하지 않는 내용을 보여줘야 하는 경우가 많다.이제 URL을 동적으로 변경할 수 있는 예를 만듭니다.
 
URLconf가 다음과 같은 경우
urlpatterns = patterns('',

('^time/$', current_datetime),

('^time/plus/1/$', one_hour_ahead),

('^time/plus/2/$', two_hours_ahead),

('^time/plus/3/$', three_hours_ahead),

('^time/plus/4/$', four_hours_ahead),

)

단점은 분명하다. 1, 2, 3, 4. 더 많은 URL 스타일과 그에 대응하는 View Fucntion을 만들어야 한다.
그러면 위의 문제를 어떻게 해결합니까?
 
정답은 정규 표현식을 이용하는 것이다.위의 4가지 URL 모양은 다음과 같은 정규 표현식으로 표현할 수 있습니다.
urlpatterns = patterns('',

# ...

(r'^time/plus/\d+/$', hours_ahead),

# ...

)

이렇게 하면 위의 4개를 대체할 수 있을 뿐만 아니라/time/plus/100000에도 적용된다.
 
(정규 표현식에 관해서는 관련 자료를 찾아보세요)
정규 표현식이 있으면 다음에 우리가 해야 할 일은 매우 간단하다. 처리 함수를 추가한다.
from django.http import Http404, HttpResponse

import datetime

def hours_ahead(request, offset):

try:

offset = int(offset)

except ValueError:

raise Http404()

dt = datetime.datetime.now() + datetime.timedelta(hours=offset)

html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)

return HttpResponse(html)

1. hours_head 함수는 두 개의 매개 변수인 Request와offset이 있습니다
2.request, 앞에서 만났는데 항상 첫 번째 인자입니다.
3. offset은 URL 스타일에서 일치하는 매개 변수입니다. 예를 들어/time/plus/3, offset=3,
/time/plus/21이면 오프셋이 21입니다.
4.여기서 우리는 오프셋이라고 이름을 지었는데, 실제로 네가 부르고 싶은 이름은 무엇이든지 다 된다.
5. 함수에서 주의해야 할 것은 int()이다. 그 역할은 문자를 숫자로 바꾸는 것이다.
6.offset에 값이 부여되어 숫자로 변환될 수 없는 값이면ValueError 이상을 촉발합니다. 404페이지가 보입니다
 
Attention:
1. 정규 표현식에서 접두사 r는 원생 문자를 뜻한다. 즉,\r는 두 글자로 간주되고 전의되지 않는다.
2. 정규 표현식에서\d+는 괄호로 묶어야 합니다. 그렇지 않으면 "takes exactly 2 arguments(1 given)"오류가 발생합니다.

좋은 웹페이지 즐겨찾기