안녕하세요 시란입니다.
이번 포스팅에서는 media root와 media url 사용법 과 urls.py에서 import 를 할때 같은 앱명을 구분할때 할 수 있는 팁을 알려드리겠습니다.
먼저 media_root 와 media_url은 어떨때 사용할까요?
post요청을 통해서 이미지를 올렸을때 따로 settings.py 를 건들지 않는다면 이미지는 아래와 같이 나의 BASE_DIR에 저장될것이에요
보이시죠? 내 베이스디렉토리에 이렇게 업로드가 되버립니다.
한두개 post를 통해 이미지들을 올릴때는 상관없겠지만 post 요청을 통해 이미지를 업로드하는 갯수가 많아질수록
내 base directory는 더러워질꺼에요.
보통 우리는 컴퓨터를 쓸때 폴더를 지정하고 해당 폴더에 목적에 맞는 파일들을 모아두고 쓰곤 하죠?
마찬가지로 이미지를 한대 모아둘수 있으면 찾기도 편하고 정리도 깔끔하게 될 거에요.
우리는 장고한테 이미지를 저장할때는 이 폴더에 저장해줘!라고 알려줘야합니다.
이런 기본적인 세팅은 대부분 settings.py 에서 해결하게 되어있습니다.
settings.py에 아래와 같이 써주시면 됩니다.
이렇게 settings.py에 우리가 앞으로 사용할 정보에 대해서 적어놓고 필요한곳에 꺼내서 쓰시면 됩니다.
자 하나하나 설명드릴께요'
MEDIA_ROOT는 실제로 사용자가 올리는 이미지의 폴더 위치를 의미합니다.
저의 경우는 BASE_DIR/templates/jpg라는 경로로 설정해줬습니다.
BASE_DIR를 어디를 말할까요?
이 위치 또한 django의 settings.py에 적혀있습니다.
위의 사진을 보시면
BASE_DIR에 대해서 써있죠? Path를 통해서 현재 폴더의 부모의 부모 폴더, 즉 내 프로젝트 폴더가 되겠네요.
그리고 주석처리로 BASE_DIR를 사용하는 방법에 대해서도 적혀있습니다.
그 방법대로 똑같이 썼습니다.
그래서 BASE_DIR/templates/jpg는 내 프로젝트의 폴더의 templates/jpg라는 경로가 되겠죠?
해당 경로에 새로운 폴더들을 설치해준다면 이제 해당 경로에 파일들이 저장되게 됩니다.
그리고 MEDIA_URL이 의미하는 것은 저장된 MEDIA_ROOT를 어떤 URL을 써서 매핑할껀지를 의미합니다.
저는 template/라고 써줬습니다.
그러면 127.0.0.1:8000/template/'이미지파일이름'
이라는 url로 제가 저장한 이미지 파일들을 찾을수 있게 됩니다.
별로 어렵지 않죠?
중요한게 빠졌네요.
urls.py에 내가 이런 설정을 해줬다는걸 알려줘야합니다.
자 위의 코드처럼 urlpatterns = [~~~] 에 추가로 static() 정보를 위에 처럼 주시면 됩니다.
urls.py가 나온김에 import할때 발생할 수 있는 이슈거리도 정리해봅시다.
자 다음과 같은 코드가 있습니다.
이 코드의 문제점은 무엇일까요?
아래 두 path를 살펴볼께요. 둘다 urls를 include하고 있죠.
이렇게 작성한 의도는 'feed'라는 url을 주었을땐, feed의 urls을 참조하고, (127.0.0.1:8000/feed/)
''이라는 url을 썻을땐 app의 urls를 참조했으면 좋겠다는 내용이에요. (127.0.0.1:8000/)
하지만 의도와는 다르게 전부 urls는 마지막으로 선언한 app의 urls로 이어지게 되어있습니다.
(너무 당연하죠?)
그러면 이걸 원래 원하는대로 하려면 어떻게 해야될까요?
바로 이렇게 해결하면 됩니다.
무엇이 바뀌었냐면 같은 urls를 import 하지만 as를 써서 변수명을 구분해주면 됩니다.
생각보다 간단하죠?
근데 막상 해결하려고 할땐 생각이 잘 안나더라고요.
제가 했던 고생을 안하셨으면 좋겠네요.
그럼 여기까지 이번 포스팅을 마무리 하겠습니다.
감사합니다.
'컴퓨터 프로그래밍 > Django' 카테고리의 다른 글
[Django] image 업로드 시 실수 하는 부분 체크! django 에서 사진이 안불러져요. (0) | 2023.11.07 |
---|---|
[Django] media root에 이은 static root 설정과 css분리 방법 정리! (0) | 2023.10.23 |
[Django] 시간, 분, 초 날짜 분리방법, 현재시간과 업데이트된 날짜의 차이를 구하고 싶을때!! timezone, timedelta, datetime (0) | 2023.10.12 |
[Django] 기본중의 기본 python, Django를 들어가기 전에 알아야 될 것들 (0) | 2023.09.05 |
[Django] VSCode 에서 django 자동완성이 안될 경우 (0) | 2023.09.01 |