티스토리 뷰

Django

[Django Basic 08] URL Reverse

Liiot 2020. 2. 9. 00:25

1. URL Reverse

: view 함수를 사용하여 URL을 역으로 계산하는 것

  • 개발자가 일일이 URL을 외워 하드코딩하지 않아도 된다.

  • URL이 변경되어도, URL Reverse가 변경된 URL을 추적한다.

    • 누락될 위험 감소
    • 유지보수가 용이해짐

즉, urls.py에서 정의한 url pattern의 name만 알고 있다면 view 함수를 통해 매칭되는 url을 찾아 이를 전달받을 수 있다.

 

2. URL Reverse를 수행하는 4가지 함수

2-1. reverse()

  • 전달받은 인수(name)와 매칭되는 url을 반환
  • 매칭되는 url이 없는 경우 NoReverseMatch 예외 발생
reverse('bookmark:list')
print(reverse('bookmark:list'))
>>> /bookmark/
print(reverse('/bookmark/'))    # NoReverseMatch 예외 발생


reverse('bookmark:detail', args=[3])
reverse('bookmark:detail', kwargs={'id':3})

# 활용 예시
def index(request):
    return HttpResponseRedirect(reverse('bookmark:detail', args=[3]))

 

2-2. resolve_url()

  • 전달받은 인수(name)와 매칭되는 url을 반환

  • 매칭되는 url이 없는 경우 NoReverseMatch 예외 발생

  • 내부적으로 reverse() 사용

resolve_url('bookmark:list')
print(resolve_url('bookmark:list'))
>>> /bookmark/
print(resolve_url('/bookmark/'))    # 예외 발생 없이 그대로 문자열 반환
>>> /bookmark/

resolve_url('bookmark:detail', 3)
resolve_url('bookmark:detail', id=3)

 

2-3. redirect

  • 전달받은 URL로 HttpResponseRedirect를 반환

  • 내부적으로 resolve_url() 사용

redirect('bookmark:list')
redirect('bookmark:detail', 1)

redirect('/bookmark/detail/1/')        #상대 url
redirect('http://example.com/bookmark/detail/1')    #절대 url

 

2-4. {% url %}

  • url template tag
  • 내부적으로 reverse() 사용
{% url 'bookmark:list' %}
{% url 'bookmark:detail' 3 %}

 


 

참고 자료

 

URL Reverse, 아는 사람은 꼭 쓴다는 get_absolute_url() · 초보몽키의 개발공부로그

특정 모델에 대한 Detail뷰를 작성할 경우, Detail뷰에 대한 URLConf설정을 하자마자, 필히 get_absolute_url설정을 해주세요. 코드가 보다 간결해집니다

wayhome25.github.io

 

12. URL Reverse

Django URL Dispatcher urls.py 변경만으로 "각 뷰에 대한 URL"이 변경되는, 유연한 URL 시스템 urlpatterns = [ url(r'^blog/$', blog_views.post_list, name='post_list'), url(r'^blog/(?P\d+)/$', blog_vi..

jjinisystem.tistory.com

 

장고 기초 정리

인생과 개발기간은 짧으니 Django를 씁시다 AskCompany의 장고 강의 내용을 정리한 내용입니다. 목차 $ 장고 주요 기능들 본 코스 별도 코스 $ 장고 앱 장고 앱 설명 모듈의 패키지화 앱 생성 시, 작업할 것들 $ U..

ddn-tech.tistory.com

 

댓글