🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

messages-alert가 제대로 작동하지 않습니다.

22.07.04 21:06 작성 조회수 148

1

안녕하세요. 현재 settings.py에서 message_tag를 이용해 태그를 error->danger로 변경하는 부분이 적용되지 않는 문제가 있습니다.
 
이에 앞서 모든 message tags가 일괄적으로 info로 나타나는 문제가 있습니다. 전에 layout.html에서
<div class="alert alert-info">  
{{ message.message }}
</div>
를 넣어줬는데, 정상적으로 작동해야할 messages.success마저 실제로는 info로 제공됩니다. alert-info를 alert-success로 바꿨을 때는 success가 적용되는 부분은 확인했습니다.(아래 "this is warning", "this is success"는 messages.warning/success 가 실제로는 info로 제공되는 문제입니다.)
 
views.py와 post_new, post_edit 함수 코딩은 다음과 같습니다.
 
from django.contrib import messages

@login_required # request.user를 외래키로 할당하려면 로그인 상태라는 보증이 필요하니까
def post_new(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user # 현재 로그인 유저 instance
            post.save()
            messages.success(request, '포스팅을 저장했습니다.')
            return redirect(post)        
    else :
        form = PostForm()

    return render(request, 'instagram/post_form.html', {
        'form': form,  
    })

@login_required
def post_edit(request, pk):
    post = get_object_or_404(Post, pk=pk)

    # 작성자 체크 팁인데 login_required 장식자를 커스텀하면 해당 기능을 넣을 수 있을 듯?
    if post.author != request.user:
        messages.error(request, '작성자만 수정할 수 있습니다.')
        return redirect(post)

    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES, instance=post)
        if form.is_valid():
            post = form.save()
            # post = form.save(commit=False)
            # post.save()
            messages.success(request, '포스팅을 수정했습니다.')
            return redirect(post)        
    else :
        form = PostForm(instance=post)

    return render(request, 'instagram/post_form.html', {
        'form': form,  
  })

답변 1

답변을 작성해보세요.

1

안녕하세요.

템플릿에서 각 메세지를 렌더링할 때,

메세지 내용은 {{ message.message }} 를 통해 잘 지정하셨지만,

메세지 레벨은 일괄적으로 클래스명에서 alert alert-info 로만 쓰셔서 그렇습니다. 이 클래스명도 메세지마다 달라져야 합니다.

메세지 레벨은 {{ message.tags }} 를 통해서 참조하실 수 있습니다.

공식문서 : https://docs.djangoproject.com/en/4.0/ref/contrib/messages/#displaying-messages

그러니 class="alert alert-info" 대신에 class="alert alert-{{ message.tags }}" 로 써보시겠어요?

렌더링된 html이 원하는 대로 잘 구성되었는 지, 확인하는 습관을 들이시면 오류를 빠르게 찾아내실 수 있습니다.

화이팅입니다. :-)

이진석 드림

 

뤀쪼님의 프로필

뤀쪼

질문자

2022.07.05

감사합니다.

채널톡 아이콘