티스토리 뷰
Messages Framework
1회성 메세지를 담는 용도
HttpRequest 인스턴스를 통해 메세지를 남길 수 있음. # 세션에 저장됨 세션=>DB 세션을 저장하기위해 httprequest가 필요함
메세지는 1회 노출이 되고, 사라집니다. 새로고침하면 보여지지 않음.
ex) "저장되었습니다.", "로그인되었습니다."
Message Levels를 통한 메세지 분류
파이썬 로깅 모듈과 유사. 레벨 별로 필터링이 가능하며, 템플릿에서 다른
스타일로 노출이 가능
• DEBUG : 디폴트 설정 상으로 메세지를 남겨도 무시
• INFO
• SUCCESS
• WARNING
• ERROR
메세지 등록 코드
해당 뷰 요청을 한 유저에게만 노출할 메세지를 다수 등록
유저 별로 메세지가 따로 등록
# blog/views.py from django.contrib import messages def post_new(request): # 중략 if form.is_valid(): post = form.save() messages.add_message(request, messages.INFO, '새 글이 등록되었습니다.') # 첫번째, 초기지원 messages.info(request, '새 글이 등록되었습니다.') # 두번째, shortcut 형태 return redirect(post) # 생략 |
메세지 소비 코드
메세지가 등록되고 난 후, 템플릿 렌더링을 통해 메세지 노출
messages context_processors 를 통해 message list에 접근
- message.tags 속성을 통해 레벨을 제공
- message.message속성을 통해 내용을 제공 (= str(message))
{% if messages %} <div class="container"> {% for message in messages %} <div class="alert alert-{{ message.tags }}"> [{{ message.tags }}] [{{ message.message }}] </div> {% endfor %} </div> {% endif %} |
참고) Django Context Processors
템플릿에서 쓸 변수목록을 템플릿 렌더링 요청 시에 넘기지 않아도, 독립적 으로 Context Processors 함수가 호출되어, 그 리턴값 (사전타입) 을 모 아서 템플릿에서 참조
디폴트 context_processors : debug, request, auth, messages
settings.py
'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', |
Bootstrap Alert 스타일로 메세지 노출하기
• bootstrap alert class-name #ref : alert-info, alert-success, alert-warning, alert-danger
• message tags : debug, info, success, warning, error
<!-- askdjango/templates/layout.html -->
{% if messages %} <div class="messages"> {% for message in messages %} <div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}> {{ message.message }} </div> {% endfor %} </div> {% endif %} |
bootstrap 측에 alert-debug 스타일이 없음 없으면 만들면 된다.
.alert-debug {
background-color: #eee;
border-color: #eee;
color: #333;
}
Tip: 장고 기본설정으로 debug 메세지는 무시되고 있음. debug level을
쓸려면 아래와 같이 settings.MESSAGE_LEVEL을 변경해줘야함
# askdjango/settings.py from django.contrib.messages import constants as messages_constants MESSAGE_LEVEL = messages_constants.INFO # 디폴트 설정 MESSAGE_LEVEL = messages_constants.DEBUG # 이렇게 설정해줘야 debug메세지가 노출됨 |
bootstrap 측은 error가 아닌 danger
선택1) error로 지정하지만 message.tags는 danger로 출력토록 설정
# askdjango/settings.py
from django.contrib.messages import constants as messages_constants
MESSAGE_TAGS = {message_constatns.ERROR: 'danger'}
선택2) alert-error 스타일 만들기 (매 bootstrap 테마마다 일일이 설정해 줘야 하므로 비추)
"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""
'Python > * Django' 카테고리의 다른 글
20. Form Template Custom Render (0) | 2017.12.27 |
---|---|
19. ModelForm (0) | 2017.12.20 |
18. Form (0) | 2017.12.19 |
17. HttpRequest and HttpResponse (0) | 2017.12.18 |
16. CSRF(Cross-Site Request Forgery) (0) | 2017.12.15 |