티스토리 뷰
미디어 설정 부분
1. settings.py에 설정해야 하는 부분
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media' 는 이제 이미지를 서버에 저장하는 부분
MEDIA_URL = 'media/'는 이미지를 클라이언트에서 접근할 수 있는 url이다.
1-1 urls.py 설정
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
위와 같이 static경로를 추가시켜주는 것으로 이미지를 서버에서 사용 가능하다
2. models.py에서 설정해야 하는 부분
필수적인 요소는 아니지만, 이미지가 많아지면 많아질 수록, 구분하기 힘들다는 것이 단점이다.
그래서 models.py에 있는 이미지가 존재하는 모델에 설정을 추가한다.
class Category(models.Model):
name = models.CharField(max_length=20)
image = models.ImageField(upload_to='restaurants',blank=True)
위와 같이 image 필드에 upload_to 를 지정해주는 것으로 만약 카테고리가 생성되고, 이미지를 가지고있는 경우에는, 아래와 같은 경로에 이미지가 업로드 된다.
추가로, 이 경로에 날짜를 지정하는게 어느 날짜에 올라온 이미지인지 구분하기 쉽다.
3. django - html에서 image를 보여주기
{% if restaurant.category.image %}
<img src="{{restaurant.category.image.url}}" alt="">
{% else %}
<img src="{% static 'korean_food.jpg' %}" alt="">
{% endif %}
위와 같이 작성하면, 이미지가 존재하는 경우, image의 url을 가져와서 제공하고, 없는경우 기본이미지를 static으로 가져와서 설정한다.
4. form에서 이미지를 보내는 방법
이미지를 form에서 보내기 위해서는 enctype을 수정할 필요가 있다.
<form method="POST" enctype="multipart/form-data">
위와 같이 작성하면 이미지를 form을 통해서 업로드 할 수 있다.
5. view함수에서 이미지를 처리하는 방법
아래와 같이 form에 request.FILES를 전달해줘야한다.
def index(request):
ModelForm(request.POST,request.FILES)
그러면 save를 할 때, 자동으로 이미지가 위에 model과 settings.py에서 설정한 대로 업로드 된다.
'Python > Django' 카테고리의 다른 글
파이썬 우분투에서 pip install 실행시 File "/usr/bin/pip3", line 9, in 에러 (0) | 2024.06.27 |
---|---|
장고 커스텀유저, 미디어, 스태틱 기본설정 복붙용 (0) | 2024.04.12 |
django widget 사용해서 오류띄우기 관련 페이지 (0) | 2024.03.28 |
ModelForm에서 Widget을 통해 속성 조작하기 (1) | 2024.03.27 |
vscode에서 장고 auto import를 하는법 (0) | 2024.03.14 |
- Total
- Today
- Yesterday
- 다대일
- 코딩테스트
- 배열
- Python
- QueryDSL
- test
- ModelAttribute
- 데이터베이스 설계
- spring data JPA
- 11기
- @BaseEntity
- dto
- Java
- security
- Config
- 일대다
- notion
- 작업 순서정리
- SSAFY
- 취업
- JPA
- 커맨드객체
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |