기술블로그
✅ 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로 설정 가능 |