바뀜

1,885 바이트 추가됨 ,  2023년 2월 6일 (월) 17:32
2번째 줄: 2번째 줄:  
장고에서 이미지를 다루는 것과 관련한 문서.
 
장고에서 이미지를 다루는 것과 관련한 문서.
    +
사진을 올리고 관리하기 위해선 모델을 하나 만들어 개별적인 관리가 필요하다.
 +
 +
이미지 사용은 두가지 개념이 있다. 관리자가 static 디렉터리 안에 두고 사용하는 이미지와 사용자들이 올리는 이미지.(media)
 
=== 사전 준비 ===
 
=== 사전 준비 ===
   7번째 줄: 10번째 줄:  
pip install pillow : 이미지를 관리해주는 라이브러리.
 
pip install pillow : 이미지를 관리해주는 라이브러리.
    +
모델을 반영하기 위해 makemigrations를 실행하면 에러가 뜬다. HINT로 pillow를 설치하라는 메시지가 뜬다. 메시지 그대로 <code>python -m pip install Pillow</code>를 입력하자.
 +
====업로드 폴더 설정====
 +
settings.py에 MEDIA_ROOT를 다음과 같이 설정한다.(기본설정이 없기 때문에 새로 써주어야 한다.)<syntaxhighlight lang="python">
 +
MEDIA_URL='/media/' #미디어 파일을 불러올 때 사용할 가상 url을 설정한다.
 +
 +
MEDIA_ROOT=BASE_DIR / 'media' #기본프로젝트 하위의 media에서 모든 업로드 매체를 관리한다.
 +
#media 하위에 앱이름으로 디렉터리를 만들고 파일을 업로드하게 된다.
 +
</syntaxhighlight>유저가 업로드한 파일이 모두 여기에서 관리된다.
 
== 방법 ==
 
== 방법 ==
 
{| class="wikitable"
 
{| class="wikitable"
12번째 줄: 23번째 줄:  
!설명
 
!설명
 
!방법
 
!방법
 +
|-
 +
|모델 생성
 +
|이미지를 저장할 모델과 칼럼을 생성해준다.
 +
 /앱/models.py 안에 작성한다.
 +
 +
 +
upload_to는 저장할 경로를 정하는 것. 경로는 연도, 월, 일자로 구분하는데, 하나의 디렉터리에 관리하는 것보다 찾는 속도가 빠르다. 그리고 파일의 내용에 대해 유추하기도 어렵다.
 +
 +
저장경로는 f'경로/%Y/{변수}' 형태로 지정해 넣을 수도 있다.
 +
 +
default는 이미지 업로드가 되어있지 않을 때 사용할 것을 의미한다.
 +
 +
default 는 해당 미디어를 찾지 못했을 때 나타내 보여줄 것.
 +
|<syntaxhighlight lang="python">
 +
class 모델명(models.Model):
 +
    ...
 +
    upload_to='images/%Y/%m/%d', default='images/no_image.png'
 +
    ...
 +
</syntaxhighlight>
 
|-
 
|-
 
|이미지 올리기
 
|이미지 올리기
 
|HTML의 폼을 이용해 올린다.
 
|HTML의 폼을 이용해 올린다.
 +
미디어를 올릴 땐 enctype를 명시해주어야 한다.
 
|<syntaxhighlight lang="html+django">
 
|<syntaxhighlight lang="html+django">
 
<form action="{% url '앱:경로' %} " method="post" enctype="multipart/form-data">
 
<form action="{% url '앱:경로' %} " method="post" enctype="multipart/form-data">
39번째 줄: 70번째 줄:  
|
 
|
 
|}
 
|}
[[분류:5. 장고 미디어]]
+
[[분류:장고 이미지]]