Django URL reverse / URL name - 7

2023. 2. 27. 22:28·Develop/Django
728x90
SMALL

앞서 다뤄본 것은 "Redirect"였다. 여기서 monthly_challenge_by_number 함수의 redirect 구문에 challenges를 지정해서 넣어줬었다. 하지만 이렇게 되면 monthly_challenges 폴더의 urls.py에 url을 변경하게 되면 페이지를 호출할 수 없게 된다.

물론, 함수의 redirect구문을 똑같이 변경해주면 문제가 없다. 하지만 웹 규모가 커지게 되면 오류를 찾기가 힘들 수 있다.

 

ex) monthly_challenges 폴더 URL

challenges => challenge

urlpatterns = [
    path("challenge/", include("challenges.urls"))
]

ex) monthly_challenge_by_number 함수

challenges

def monthly_challenge_by_number(request, month: int):
    monthly_case_key = list(monthly_case.keys())

    if month > len(monthly_case_key):
        return HttpResponseNotFound("Not month")

    response = monthly_case_key[month - 1]
    return HttpResponseRedirect(f"/challenges/{response}")

URL reverse / name

 

1) challenges(앱)의 url에 name을 추가한다.

이름을 사용하여 경로 URL을 구성할 수 있다.

from django.urls import path

from . import views

urlpatterns = [
    path("<int:month>", views.monthly_challenge_by_number),
    path("<str:month>", views.monthly_challenge, name="month-challenge")
]

 

2) view에 reverse를 추가한다.

from django.urls import reverse

def monthly_challenge_by_number(request, month: int):
    monthly_case_key = list(monthly_case.keys())

    if month > len(monthly_case_key):
        return HttpResponseNotFound("Not month")

    response = monthly_case_key[month - 1]
    redirect_path = reverse("month-challenge", args=[response])
    return HttpResponseRedirect(redirect_path)

reverse는 전달받은 인수(name)와 매칭되는 URL을 반환한다.

여기서는,  path("<str:month>", views.monthly_challenge, name="month-challenge") 반환한다.


Reverse 추가 설명

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

=> url.py에서 호출할 url name만 알고 있다면 view를 통해 name에 해당되는 url을 찾아 호출할 수 있다.

 

장점

  • URL이 변경이 되어도 자동으로 URL을 추척
  • 개발자가 변경되어도 URL을 하드코딩하지 않아도 된다.
  • 코드 관리, 유지 보수 용이

 

Reverse를 할 수 방법에는 여러 가지가 있다고 한다.

reverse, resolve_url, redirect, {% url %}

 

728x90
SMALL
저작자표시 비영리 (새창열림)

'Develop > Django' 카테고리의 다른 글

Django (페이징 뷰) 검색 페이지 기능 구현하기  (0) 2023.03.24
Django View에서 HTML 태그 넣어보기 - 8  (0) 2023.02.27
Django 리다이렉트(Redirect) - 6  (0) 2023.02.26
Django 동적 URL 패턴 로직 추가- 5  (0) 2023.02.26
Django 경로 변환(타입 추가) - 4  (0) 2023.02.26
'Develop/Django' 카테고리의 다른 글
  • Django (페이징 뷰) 검색 페이지 기능 구현하기
  • Django View에서 HTML 태그 넣어보기 - 8
  • Django 리다이렉트(Redirect) - 6
  • Django 동적 URL 패턴 로직 추가- 5
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
Django URL reverse / URL name - 7
상단으로

티스토리툴바