URL Namespace

Ryu Honggyu·2024년 8월 20일

Django

목록 보기
10/19
post-thumbnail

URL Namespace

  • Django에서 서로 다른 앱이 동일한 URL 패턴을 쓸 경우 충돌을 방지하기 위해 사용

문제 상황

  • 두 개의 앱인 articlesusers에서 동일한 URL 패턴이 존재할 경우를 가정함.
  • hello/ URL 패턴을 두 앱에서 모두 사용하기에, 해당 패턴을 사용할 때 어떤 앱의 패턴을 사용하는 것인지 혼란 발생.
# articles/urls.py
urlpatterns = [
 path("hello/", views.hello, name="hello"),
]
# users/urls.py
from django.urls import path
from . import views

urlpatterns = [
 path("hello/", views.hello, name="hello"),
]

URL Namespace 설정

  • 고유 app_name을 설정해 네임스페이스를 적용.
# articles/urls.py
from django.urls import path
from . import views

app_name = "articles"  # 네임스페이스 = articles

urlpatterns = [
 path("hello/", views.hello, name="hello"),
]
# users/urls.py
from django.urls import path
from . import views

app_name = "users"  # 네임스페이스 = users

urlpatterns = [
 path("hello/", views.hello, name="hello"),
]
  • 네임스페이스를 설정한 후에는 URL을 참조할 때 namespace:url_name 형식을 사용함.
{% url 'articles:hello' %}  # articles 앱의 hello URL 참조
{% url 'users:hello' %}  # users 앱의 hello URL 참조

redirect('articles:hello')  # articles 앱의 hello URL로 리디렉션
redirect('users:hello')  # users 앱의 hello URL로 리디렉션
  • 일종의 alias 를 만드는 것이라고 이해함.

네임스페이스 관련 오류

URL참조 업데이트

  • 기존 코드에서 네임스페이스를 적용하지 않으면 에러가 발생할 수 있음.
  • 네임스페이스를 적용 후 모든 URL 참조를 업데이트해야 함.
{% url 'create' %}  -> {% url 'articles:create' %}

redirect('create') -> redirect('articles:create')
  • 웬만해선 처음부터 URL 네임스페이스를 적용하는 편이 좋음.

NoReverseMatch 오류

  • NoReverseMatch: Django에서 URL을 역으로 매핑할 때 URL 패턴을 찾지 못할 경우 발생하는 오류.
  • 주로 URL 네임스페이스가 제대로 설정되지 않거나, 잘못된 URL 이름을 사용했을 때 발생.

NoReverseMatch: Reverse for 'hello' not found. 'hello' is not a valid view function or pattern name.

profile
알고리즘 & 웹 & CS & AI

0개의 댓글