The Definitive Guide To Django 2 학습 노트 (4) 동적 URLs
3762 단어 django
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)"오류가 발생합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.