기술블로그

✅ Django에서 {% url 'login' %}이 가능한 이유 정리

Chansman 2025. 5. 6. 19:08

Django에서 {% url 'login' %}이 가능한 이유 정리

Django에서는 {% url 'login' %}처럼 이름으로 URL을 참조할 수 있는데, 이때 'login'이라는 name을 우리가 명시적으로 지정하지 않았는데도 동작하는 이유가 궁금하셨죠? 이 글에서는 그 이유를 구조적으로 쉽게 설명해드릴게요.


1️⃣ 기본 URL 설정 확인하기

Django 프로젝트에서 아래와 같이 urls.py에 로그인 관련 경로를 추가할 수 있습니다:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.blog_list, name='blog_list'),
    path('<int:pk>/', views.blog_detail, name="blog_detail"),

    # 🔐 Django의 인증 URL들 포함
    path('accounts/', include('django.contrib.auth.urls')),
]

이 한 줄이 핵심입니다:

include('django.contrib.auth.urls')

2️⃣ django.contrib.auth.urls가 하는 일은?

Django는 django.contrib.auth.urls를 통해 다음과 같은 기본 인증 URL 패턴들을 자동 등록합니다:

경로 (Path) URL Name (name) 기능

accounts/login/ 'login' 로그인 폼 페이지
accounts/logout/ 'logout' 로그아웃 수행
accounts/password_change/ 'password_change' 비밀번호 변경 페이지
accounts/password_reset/ 'password_reset' 비밀번호 재설정 페이지 등

✅ 이 이름(name)들은 Django 내부에서 이미 설정되어 있기 때문에, 우리가 템플릿에서 바로 사용할 수 있습니다:

<a href="{% url 'login' %}">로그인</a>
<a href="{% url 'logout' %}">로그아웃</a>

3️⃣ 비교: 우리가 만든 URL vs Django가 만든 URL

항목 우리가 직접 만든 URL Django 기본 URL

정의 방식 path('about/', views.about, name='about') 내부적으로 이미 path('login/', ...) 형태로 등록됨
URL name 우리가 직접 name 부여 Django가 미리 부여함 ('login', 'logout' 등)
사용 예 {% url 'about' %} {% url 'login' %}

4️⃣ 팁: 로그인 후 리디렉션 설정

사용자가 로그인한 뒤 어느 페이지로 갈지를 설정하려면 settings.py에 다음을 추가합니다:

LOGIN_REDIRECT_URL = '/'

로그인 후 홈 페이지(/)로 자동 이동하게 됩니다.


✅ 요약

항목 설명

{% url 'login' %}이 가능한 이유 django.contrib.auth.urls를 include()했기 때문
login, logout 같은 이름은 어디서 왔나? Django 내부에서 기본 name으로 등록되어 있음
사용 조건 반드시 path('accounts/', include('django.contrib.auth.urls'))가 있어야 함
추가 팁 로그인 후 이동 경로는 LOGIN_REDIRECT_URL로 설정 가능