Django CRUDDjango 폼(Form)일기장 페이지 만들기

Q

django에서 models.FileField()를 사용해서 사진을 받고 어떻게 다시 화면에 표시할 수 있을까요?

조회 1606

좋아요 2

2021년 5월 13일




댓글 3

2021년 5월 13일
1번 문제는 공식문서 보고. image = models.FileField(upload_to='note/static/note/') 를 통해 해결했습니다!
2021년 5월 14일
2번 문제는 {{note.image.url}} 을 사용하면 된다고 찾아서 stackoverflow에서 찾았는데 {% static {{note.image}} %} 를 {{note.image}}로 바꾸어도 사진이 뜨지 않습니다.
2021년 5월 14일
아 윗댓글 마지막 {{note.image.url}}입니다
A
3개의 답변이 있어요
커뮤니티 파트너 채택



2021년 5월 20일

댓글 6

2021년 5월 20일
음.. 바꾸면 이런 오류가 나네요..

--views.py 입니다.
def newPage(request):
if request.method == 'POST':

newPost = Post(
title = request.POST['title'],
WR = request.POST['WR'],
image = request.POST['image'],
)
newPost.save()
return redirect(request, 'detail-page', id=newPost.id)
else:
note_form = PostForm
return render(request, 'posts/forms.html', {'form': note_form})

실행을 시켜주면 4번제 줄에서
django.utils.datastructures.MultiValueDictKeyError: 'image'

이라는 에러가 납니다
2021년 5월 20일
파일인 경우는 request.FILES 를 통해 파일이 전달됩니당. request.POST 가 아니라 request.FILES['image'] 와 같이 해보셔용
2021년 5월 20일
감사합니다!!
2021년 5월 20일
랑이님..ㅠㅠ 모델폼(https://www.codeit.kr/learn/courses/django-web-development/4132) 으로 이미지 업로드하는법 질문할려고 costory에서 이미지를 모델을 통해서 업로드를 했는데 왜 안되는 걸까요..ㅠㅠ (저번에 해결 했던 문제입니다.) 뭔가를 잘못한게 있을까요? 다시봐도 문제를 모르겠습니다..
.
.
settings.py 에 `MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')`를 추가했습니다.

```
#models.py

from django.db import models



class Post(models.Model):
# 글의 제목, 내용, 작성일, 마지막 수정일
title = models.CharField(max_length=50)
content = models.TextField()
image = models.ImageField(upload_to='images/')
dt_created = models.DateField(verbose_name='Date Created', auto_now_add=True)
dt_modified = models.DateTimeField(verbose_name="Date Modified", auto_now = True)

def __str__(self):
return self.title
```

```

{% block content %}

{{post.content|linebreaksbr}}



수정일 {{post.dt_modified}}




{% endblock content %}
```
.
.
에러 코드: ``Not Found: /media/images/스크린샷_2021-05-02_오후_3.01.03.png``
2021년 5월 20일
스크린샷_2021-05-02_오후_3.01.03.png 요 파일이 코드 제대로 작성된 뒤 올라간 파일인가요? 해당 폴더에 파일이 있긴 있나요??
2021년 5월 20일
파일이 제대로 올라갔고 다시 해봐도 안됩니다..ㅠㅠ



2021년 5월 14일

댓글 10

2021년 5월 14일
넵!!
2021년 5월 15일
안녕하세요! 링크들어가서 봤는데요.. pyenv 로 만든 프로잭트에 pipenv install pillow 를 설치해서 사용할 수 있을까요?
아니면 그냥 pipenv 로 프로젝트를 다시 만드는게 좋을까요?
2021년 5월 16일
pipenv 나 pyenv 나 가상환경을 설정하는건 같습니당. media 폴더를 활성화시키는데 초점을 두고 보시면 좋겠어용. 그리고 제가 탱글이님이 구현하려고 하신걸 이해한바로는 pillow 가 필요없을겁니다
2021년 5월 16일
안녕하세요! 그냥 설정에 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 를 추가하면 되더라고요. 근데 form까지 다 만들어서 입력을하기까지는 되는데요. views.py에서 사진을 모델에 넘겨주는? 그 부분에서 안되는거 같습니다.
admin에서 추가하면 파일에 저장이 되는데, forms.html에서 추가하면 사진이 파일에 저장이 안됩니다.
2021년 5월 16일

#views.py
def newPage(request):
if request.method == 'POST':
newPost = Post(
title = request.POST['title'],
cover = request.POST['cover'],
)
newPost.save()
return redirect(request, '/posts/')
else:
note_form = PostForm
return render(request, 'posts/forms.html', {'form': note_form})
2021년 5월 16일
form.py이랑 views.py를 def말고 class 로 사용하면 될거같은데... 그건 안배워서 제 마음대로 바꿀수가 없을거 같네요....
2021년 5월 18일
알림이 너무 밀렸네용 ㅠㅠ 요거 확인해볼게용
2021년 5월 19일
답장이 늦었네요ㅠㅠ form.py 도 올려주실 수 있을까용 알 것 같습니다! forms.html도요!
2021년 5월 19일
forms.html 입니다:

{% csrf_token %}
{{form.as_ul}}

2021년 5월 19일
forms.py 입니다

from django import forms

class PostForm(forms.Form):
title = forms.CharField(max_length=70, label='틀린 문제 쪽수')
WR = forms.CharField(widget=forms.Textarea, label='틀린 이유')
image = forms.FileField(label='틀린문제 사진')



2021년 5월 21일

댓글 15

2021년 5월 21일
아 그렇군요! 감사합니다.
2021년 5월 21일
음... 근데 그냥 ImageField를 FileField로 바꾸면 작동 해야되는게 아닌가요? pillow설치하기 번거로워서 FileField로 바꾸었는데.. (설정 완료후에 다시 저장하고 실행 했습니다.)
2021년 5월 21일
정확히 에러 메세지가 어떻게 뜨나용?
2021년 5월 21일
Not Found: /media/images/test.png 이라고 뜹니다
2021년 5월 21일
민감한 코드가 없다면 혹시 github 에 전체 올려주실 수 있을까용? 그게 더 빠를 것 같습니당 ㅠ
2021년 5월 21일
아! 그런 방법이.. 그런데 아직 github를 쓰는 방법을 몰라서요.. 한번 시도 해볼께요
2021년 5월 21일
앗 그러시군용. git 은 꼭 배워두시면 좋긴 합니당!
2021년 5월 21일
git을 배우면 github도 같이배우나요?
2021년 5월 21일
아 코드잇 강의를 보니 있네요. 배워서 올려보겠습니다!
2021년 5월 21일
나중에 배우시긴 해야겠지만, 이것 때문에 지금 배우실 필요는 없을거에용. 제가 다시 한번 확인해보겠습니당
2021년 5월 22일
https://github.com/kimbrother6/costory
필요한 부분만 배워서 올려봤습니다! 이렇게 하면 되는건가요?
2021년 5월 22일
네 맞습니당! 전 잘 되는거 확인했는데 혹시 위 코드 넣으셨나용? 지금 보니 if settings.DEBUG: 와 같이 : 가 빠져있었네용;;
2021년 5월 22일
아 ImageField말고 그냥 FielField를 써서 했습니다. 전 왜 안되는거죠...ㅠㅠ
2021년 5월 23일
filefiled, imagefield 상관없이 위 코드는 꼭 넣어주셔야 합니다. 개발서버에서는 이미지가 보이지 않기 때문에 별도로 위와 같이 해주는거에요. test.png 가 포스트 클릭하면 저는 잘 보입니다.
2021년 5월 23일
costory 폴더 urs.py 에 이 답글 코드를 꼭 첨부해주세요

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇