본문 바로가기
개발일지/Django

Django - admin 경로가 없어졌어요 (해결방법)

by 개발에정착하고싶다 2023. 1. 20.

#0 잡설 및 장고 개발자 신입 이전의 테크트리 간략 추천

 

이건 진짜 생각지도 못했고 상당히 당황스러웠다.

하지만 이것도 마찬가지로 강사님의 도움으로 해결했다.

진짜 장고 입문자에게는 추천하고 싶은 코스가

 

1. 유데미 장고 한글자막 있는거 아무강의나 하나 (아마 한두개정도 있을거임)

-> 2. Do it 점프 투 장고 책

-> 3. Do it 장고+부트스트랩 파이썬 웹개발의 정성 (이게 진짜배기임 1,2는 이걸 이해하고 활용하기위한 과정이라고 보면됨)

여기까지도 사실 3번에서 반복만해도 신입으로썬 충분할것같다는 생각이 들지만

조금 더 욕심낸다면 혹은 Django 개발자로 취업을 했다면

인프런의 이진석 강사님 강의중 20만원 넘는 강의가 있다 48시간정도 분량이다.

이걸 하게되면 진짜 처음엔 무슨말하는지 하나도 못알아듣는다. 하지만 알아들을 수 있을 정도가 되면

체감컨데 신입에서 중급 개발자로 도약하기에 아주 적절한 강의라고 본다.

여타 강의는 답변 띡띡 해주다가 "직접 찾아보는것도 실력이 됩니다. 구글링으로 찾아보세요" 이딴식으로 본인 강의 안돌아가는데도 기만하면서 그럴듯하게 포장해서 어차피 해결도 안되는걸 붙들고 있는 답변과는 차원이 다르다.

혹시라도 볼수있다면 수강전에 해당 강의의 커뮤니티에서 수강자들이 어떤 질문을 했고, 강사님이 어떻게 답변해주시는지 봐도 딱 답이 나온다.

 

아무튼 각설하고


#1 문제 개요

이건 localhost:8000

으로 접속했을때 보이는 환경이다.

 

보통 초기의 경우에 urls.py에 '' 경로로 무언가를 정의해놓지만 않았다면

Page not found(404)와 함께 회색 영역에 보면

1. __debug__

등등 내가 현재 어떻게 접속할 수 있는지 경로를 안내해주는 디버그 기능이 있다.

 

하지만 나의 경우에는 admin이 보이지 않았고 이런경우는 처음이였다.

즉, admin 접속이 안된다는 의미였다.


#2 나의 코드

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='root.html'), name='root')
]

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls))
    ]

    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

이게 나의 문제가 되었던 코드였다.

 

나는 분명 admin/도 ''도 정의해줘서

최소한 2개의 경로에는 접근이 가능해야 맞는것 같은데

디버그와 미디어만 접근이 가능하다니;

황당하기 그지 없었다.


#2 접근 방식

 

힌트를 얻기로는 나는 분명 ''를 urls.py에 정의해두었음에도

localhost:8000

로 접속했을때 그와 관련된 내용이 나오는게 아니라, 없는 페이지로 나온다라..

분명 manage.py등, Django내부적으로 짜여진 로직이 내 urls.py를 읽어오는데 실패했다고 직감했다.

그도 그럴것이 인스타그램 프로젝트를 앞두고

기본적으로는 프로젝트 단위 하위에 자동으로 생성되는 "settings.py"를

프로젝트 단위/settings/common.py

로 settings라는 폴더를 만들어서 한층 더 쪼갰기 때문에 경로가 꼬였을것이라고 생각했다.

 

하지만 이 참조해오는 경로를 어떻게 풀어가야할지 감이 오질 않았다.

너무 많은 경우의 수가 예상이 되었기 때문이다.

그래서 강사님께 질문을 드렸고

돌아온 답변은 다음과 같다.

왜 askcompany/urls.py 자체가 안 읽혀와진다고 생각하셨을까요? 막연하게 생각하시기보다, 
생각하시는 근거를 같이 제시해주시면, 보다 좋은 답변을 얻으실 수 있고, 답변을 얻으셨을 때 깨달으시는 바도 커집니다.
아마도 askcompany/urls.py 파일에서 admin.site.urls 있으실 듯 하구요. 
그럼에도 보여주신 스샷과 같이 등록된 urlpatterns 에는 django debug toolbar와 media 밖에 없다면, 
이유는 하나 뿐입니다. debug toolbar나 media 설정을 urlpatterns에 추가하실 때, 
urlpatterns += 를 통해서 urlpatterns에 추가를 해주셔야 하는 데, urlpatterns = 를 쓰셔서, 
덮어쓰기를 하셨을 수 있습니다.

제가 드린 답변을 얕게만 보시고 코드에 적용하셔서, 그냥 동일한 에러가 나온다라고만 이야기하시기보다, 
시간이 걸리시겠지만 제가 드린 답변을 좀 더 깊게 이해해볼려고 노력해보셨으면 합니다.

관련 에피소드 영상도 꼭 한 번 다시 확인해보시구요.

제 강의는 반복해서 볼 때마다, 그 전에는 그냥 피상적으로 지나갔던 내용들이 더 깊게 다가온다고 
많은 분들이 이야기해주시거든요.

또 질문 남겨주세요.

화이팅입니다. :-)

즉, 나의 문제는

urlpatterns를 디버그 툴때문에 추가를 할때 +=를 써야하는 것을 =로 써서

문제가 되었기 때문이다.


+=의 경우

리스트에 append효과로써

예를 들자면

a = [12]

a += [17]

print(a)
[12,17]

이런식이 된다.

주의점은 리스트 + 리스트인것이다.

리스트 + int나 str가 아니라.


하지만 =의 경우 "오버라이드"처리가 된다.

(영어로는 overwrite 라고 보는게 타당한데 왜 오버라이드인지 참;)

a = [12]

a = [17]

print(a)
[17]

이렇게 되는 것이다.

 

결과적으로 urls.py에 있는 urlpatterns를 +=해줌으로써 해결했다.