-
[django] RedirectView, redirect in urls.pyPython/초간단 장고 Django 2022. 9. 9. 00:42반응형
board.urls을 2번 인클루드하면 경고가 발생합니다.
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('board.urls')), path('board/', include('board.urls')), path('admin/', admin.site.urls), ]WARNINGS: ?: (urls.W005) URL namespace 'board' isn't unique. You may not be able to reverse all URLs in this namespace이 상황에서 redirect를 만나면 라우팅이 엉망이 되죠.
그땐 경고가 아닌 에러가 발생합니다.board앱의 view를
root의 urls에 직접 import해
라우팅을 할 수도 있지만...
불필요한 의존성이 발생합니다.1. RedirectView CBV(Class base view) 사용.
from django.contrib import admin from django.urls import path, include from django.views.generic import RedirectView urlpatterns = [ # path('', RedirectView.as_view(url='board/')), path('', RedirectView.as_view(pattern_name='board:index')), path('board/', include('board.urls')), path('admin/', admin.site.urls), ]깔끔합니다.
https://docs.djangoproject.com/en/4.1/ref/class-based-views/base/#redirectview
2. redirect
FBV(Function base view) 느낌으로 redirect함수를 사용할 수도 있습니다.
from django.contrib import admin from django.shortcuts import redirect from django.urls import include, path urlpatterns = [ path('', lambda request: redirect('board/')), path('board/', include('board.urls')), path('admin/', admin.site.urls), ]파이썬에서는 사용하지 않는 변수의 이름으로 '_'(underscore)를 사용하는 관례가 있습니다.
관례에 따라 "path('', lambda _: redirect('board/')),"로 작성하는 것이 좋겠습니다만,
이 람다 함수가 request를 받는 장고 뷰 함수임을 보여주기 위해,
매개변수에 request를 남겼습니다.반응형