티스토리 뷰

반응형

Blog 만들기 강의를 따라하는 중에 정적파일 Media에 대한 실습을 하는데 오류가 발생했다.

아 선생님 이러지 마세요...

에러는 새 글을 작성할 때 파일 없이 글만 작성하면 발생한다. 

문제는 이것을 예상하고 대비를 해놨다는 것...

 

'models.py'를 보면

class Blog(models.Model):
    title = models.CharField(max_length=200)
    writer = models.CharField(max_length=100)
    pub_date = models.DateTimeField()
    image = models.ImageField(upload_to= "blog/", blank=True, null=True)
    body = models.TextField()

blank = True, null = True로 값이 없어도 생성될 수 있게 했다.

따라서 admin을 통해서 데이터베이스에 이미지 없는 데이터를 추가해도 정상적으로 글을 볼 수 있다.

admin을 통해 생성한 데이터

에러 페이지를 보면 'views.py'의 create함수 문제인것 같은데 강사님의 영상과 똑같이 했다는게 함정 ㅜㅜ

저기가 문제구나!
데이터가 없구나!

원래 나의 'views.py'는 이랬었다.

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.image = request.FILES['image']
    new_blog.save()
    return redirect('detail', new_blog.id)

구글링을 통해 해결했다.

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.image = request.FILES.get('image')
    new_blog.save()
    return redirect('detail', new_blog.id)

new_blog.image = request.FILES.get('image') 이런식으로 request.FILES.get() 메서드를 이용하면 get()에 전달한 키 값으로 QueryDict에 해당하는 key와 value가 있는지 찾아서 key가 있는 경우에는 key에 해당하는 value를 반환하고 key가 없으면 에러를 일으키지 않고 None을 반환한다고 한다. 출처

None이 반환되는 것은 'models.py'에 대비 해놨으므로 더이상 오류가 나지 않았다🥰

 

또다른 해결 방법은 form을 이용해서 해결했다.

def create(request):
    form = BlogForm(request.POST, request.FILES)
    if form.is_valid():
        new_blog = form.save(commit=False)
        new_blog.pub_date = timezone.now()
        new_blog.save()
        return redirect('detail', new_blog.id)
    return redirect('home')

이렇게 하니 오류가 나지 않고 글만 있는 블로그가 생성되었다.

is_valid 때문이라고 생각했는데 그렇다면 home으로 리다이렉트 되었어야되는데...흠...

 

몇시간동안 고생한거라 남기는 기록😭

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