templates의 폴더 생성과 유사합니다. app명/static/app명/css파일,image파일 등등
settings.py
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', )
개발 모드일 경우 위와 같이 설정하면 django.contrib.staticfiles가 자동으로 수행된다고 한다. 이러한 방법은 배포시(debug=false) 정상 작동하지 않는다.
templates
style.css 파일 위치 : 프로젝트폴더/앱폴더/static/앱명(polls)/style.css
사용자가 업로드 한 파일들이 모이는 곳이다.
순서는 모델의 image field를 생성, 사용자로부터 파일 업로드, DB를 통해 저장이다.
먼저 개발모드에서도 media의 파일을 사용하기 위해선 세팅이 필요하기에 settings.py에 다음 문장을 추가한다.
# 미디어 파일을 관리할 루트 media 디렉터리
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 각 media file에 대한 URL prefix
MEDIA_URL = '/media/'
파일을 연결시키기 위해서 url을 열어둬야한다.
from django.conf.urls.static import static
from django.conf import settings
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
class ImageUpload(models.Model):
photo = models.ImageField(upload_to="test/")
ImageUpload 테이블에 값을 넣고 저장할경우 midea/test/
이곳에 저장된다
이미지를 보내기 위해서 form의 속성값으로 enctype="multipart/form-data"
를 설정한다.
또한 Generic view를 사용하지 않으면 값을 보낼때 다음과 같이 세팅 후 보내야한다.
var formData = new FormData();
formData.append('photo',$("#input창 ID")[0].files[0]);
media 파일 보여줄 때
urls에서 설정해준 것처럼 media가 최상위 폴더가 되기에 src="media/파일명"이 된다.
file = ImageUpload()
file.photo = request.FILES['photo']
file.save()
위와 같이 할 경우 db에는 파일명이 들어가고 midea폴더에 사진이 들어가게된다.
ImageField 함수
file.photo.path : 해당 사진의 절대경로
file.photo.url : 해당 사진의 상대경로
file.photo : 해당 사진의 파일명