반응형
HTML파일(django template 문법 포함)을 업로드하고, 해당 파일을 상황에 맞게 include하여, 렌더링하는 기능을 만들고 있었다.
정말 하루종일 삽질했는데, settings.py 설정을 잘 해주어야 했기 때문.. 그 외에 템플릿에서의 구현도 기존 미디어 파일들과 다르니, 끝까지 읽길 권장한다.
그렇기 때문에 오랜만에 포스트를 남겨본다.
1. settings
# settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
여기까지는 django 개발을 조금이라도 해본 사람이라면, 많이 접했을 것이다. 그 밑에 코드가 중요한데 잘 봐주시길..
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 이 부분에 수정이 필요함. MEDIA_ROOT를 추가해주는 것이 포인트이다.
'DIRS': [os.path.join(BASE_DIR, 'templates'), MEDIA_ROOT],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.media',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
이 설정을 해주지 않는다면, MEDIA_ROOT의 템플릿에 접근하질 못한다.
2. models (큰 특이사항 없음)
#models.py
from django.db import models
class Layout(models.Model):
id = models.AutoField(auto_created=True, primary_key=True, editable=False)
title = models.CharField(max_length=255, null=False, blank=False, unique=True)
file = models.FileField(null=False, blank=False, upload_to='layouts')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='생성된 날짜')
updated_at = models.DateTimeField(auto_now=True, verbose_name='수정된 날짜')
처음에 안 될 때에는 모델부터 시작해서 스토리지도 바꿔보고, chmod 755로 권한도 바꿔보고, 내가 상상할 수 있는 지랄이란 지랄은 다 해봤다.
근데 셋팅만 잘 설정해주면 쉽게 해결할 수 있는 문제였다...
모델은 평범하게 설정해줘도 된다. 심플하게...
3. template
<!--*.html-->
{% include layout.file %}
보통 이미지 렌더링 등의 작업엔 layout.file.url까지 타이핑하는데, 이는 include시엔 잘못된 방법. file(models.FileField)까지만 쳐주는 게 포인트이다.
반응형
'IT' 카테고리의 다른 글
[AWS] S3 버킷 삭제 실패 시, 삭제 방법 (0) | 2019.07.28 |
---|---|
사활BOT 프로젝트 포스터 (0) | 2019.07.07 |
python의 바둑 패키지를 찾다가.. (0) | 2019.03.28 |
django admin page에 나타나는 help_text field 응용 (0) | 2019.02.18 |
django와 aws elb사용 시 주의해야할 사항 (1) | 2019.01.23 |