-
카테고리
-
세부 분야
풀스택
-
해결 여부
해결됨
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
이진석
지식공유자2022.07.04
안녕하세요.
템플릿에서 각 메세지를 렌더링할 때,
메세지 내용은 {{ 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이 원하는 대로 잘 구성되었는 지, 확인하는 습관을 들이시면 오류를 빠르게 찾아내실 수 있습니다.
화이팅입니다. :-)
이진석 드림
답변 1