티스토리 뷰

Django

[Django] 21. Image Create

개발자 뭄뭄 2022. 11. 4. 21:18
반응형

1. model에 Image 추가하기

  • app > models.py
# articles/models.py/class Article

image = models.ImageField(blank=True)
  • cf ) blank vs null
    • 공통점 : default = False
    • blank = True : 유효성 검사 (.is_valid()에서 빈 값을 입력할 수 있다.)
    • null = True : 빈 값을 NULL로 DB에 저장한다.
    • 왜 이미지 필드는 blank 값을 사용할까? → DB의 일관성 관점에서, 문자열로 저장되기 때문. 문자열은 빈 문자열을 ‘ ‘ 로 표현. → 데이터가 없음을 중복해서 표현(x)

    python manage.py makemigrations를 진행해보면 에러가 뜬다.

    articles.Article.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
  • 즉, Image Field를 이용하려면 Pillow 를 설치해야 한다.
    • $ python -m pip install Pillow진행하고 migration 을 진행해 본다.

2. ArticleForm에서 image 필드 출력 확인


  • 파일 또는 이미지 업로드 시에는 form 태그에 enctype(인코딩타입) 속성을 변경해야 한다.
  • 전송되는 데이터 타입을 지정해 주는 것이다.
    # articles / templates / create. html
    # form 의 뒷 부분에 enctype을 추가해준다.
    <form action="{% url 'articles:create' %}" method="POST" enctype = "multipart/form-data">

3. request. FILES 수정


  • 파일 및 이미지는 POST 가 아닌, FILES 로 들어간다
# articles / views.py
def create(request):
    if request.method == 'POST':

				# POST 뒤에 FILES 추가
        form = ArticleForm(request.POST, request.FILES)

        if form.is_valid():
            article = form.save(commit=False)
            article.user = request.user
            article.save()
            return redirect('articles:detail', article.pk)
    else:
        form = ArticleForm()
    context = {
        'form': form,
    }
    return render(request, 'articles/create.html', context)

4. DETAIL 페이지 수정해서 출력해보기


  • article / templates / detail.html
{% extends 'base.html' %}

{% block content %}
	# 이 부분을 추가해준다. src는 경로가 들어가야 하기 때문에 url이 들어간다.
  <img src="{{ article.image.url }}" alt="{{ article.image }}">
  <h1>DETAIL</h1>

Uploaded by N2T

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
글 보관함