"장고 메시지"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
(새 문서: == 개요 == 웹사이트에서 살짝 나타났다가 사라지는 메시지. 1회성 알림 메시지 기능이 이미 장고 안에 포함되어 있다. = 기초 사용 = {| class...) |
|||
(같은 사용자의 중간 판 2개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
== 개요 == | == 개요 == | ||
웹사이트에서 살짝 나타났다가 사라지는 메시지. 1회성 알림 메시지 기능이 이미 장고 안에 포함되어 있다. | 웹사이트에서 살짝 나타났다가 사라지는 메시지. 1회성 알림 메시지 기능이 이미 장고 안에 포함되어 있다. | ||
+ | |||
+ | === 용도 === | ||
+ | |||
+ | * 새로운 페이지로 리다이렉션 할 때 뭔가 메시지를 남기려면 일일이 render를 사용해야 하는데, 리다이렉트 하는 주소가 달라질 수 있다.(삭제 후 학교게시판 링크를 써야 할지, 일반 게시판 링크로 보내야 할지 모를 때 단순히 이전 링크로 돌려보내면서 메시지를 보내고 싶을 때.) 그런 때에도 메시지를 일관적으로 보낼 수 있다. | ||
= 기초 사용 = | = 기초 사용 = | ||
23번째 줄: | 27번째 줄: | ||
메시지의 종류는 다음과 같다. | 메시지의 종류는 다음과 같다. | ||
+ | |||
+ | (코드에서 사용할 땐 소문자로 입력해준다.) | ||
{| class="wikitable" | {| class="wikitable" | ||
!메시지종류 | !메시지종류 | ||
80번째 줄: | 86번째 줄: | ||
|settings.py 수정 | |settings.py 수정 | ||
|메시지 태그가 부트스트랩과 일치하리라 기대하긴 어렵고.. settings에서 지정해준다. | |메시지 태그가 부트스트랩과 일치하리라 기대하긴 어렵고.. settings에서 지정해준다. | ||
+ | |||
+ | |||
+ | 클래스별 형태는 다음 부트스트랩 문서를 참고하자. [https://getbootstrap.com/docs/5.1/components/alerts/ 링크] | ||
|<syntaxhighlight lang="python"> | |<syntaxhighlight lang="python"> | ||
from django.contrib import messages # 메시지를 임포트하는 것도 필요. | from django.contrib import messages # 메시지를 임포트하는 것도 필요. | ||
104번째 줄: | 113번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
+ | |||
+ | = 관련에러 = | ||
+ | |||
+ | === TypeError: 'int' object is not callable === | ||
+ | 코드 내에서 사용할 때 <code>messages.WARNING</code>처럼 대문자로 사용해서 그렇다. <code>messages.warning</code>처럼 입력해보자. |
2022년 8월 29일 (월) 17:22 기준 최신판
1 개요[편집 | 원본 편집]
웹사이트에서 살짝 나타났다가 사라지는 메시지. 1회성 알림 메시지 기능이 이미 장고 안에 포함되어 있다.
1.1 용도[편집 | 원본 편집]
- 새로운 페이지로 리다이렉션 할 때 뭔가 메시지를 남기려면 일일이 render를 사용해야 하는데, 리다이렉트 하는 주소가 달라질 수 있다.(삭제 후 학교게시판 링크를 써야 할지, 일반 게시판 링크로 보내야 할지 모를 때 단순히 이전 링크로 돌려보내면서 메시지를 보내고 싶을 때.) 그런 때에도 메시지를 일관적으로 보낼 수 있다.
2 기초 사용[편집 | 원본 편집]
과정 | 설명 | 코드 | ||||||
---|---|---|---|---|---|---|---|---|
settings.py 수정 | 메시지를 쿠키에서 사용할 것이냐, 세션에서 사용할 것이냐를 지정해준다.
우측 코드 중 하나를 적절한 위치에 추가하면 된다. |
| ||||||
뷰 수정 | 실제로 사용할 뷰를 수정해준다.
render 이전에 지정해주면 된다. request와 메시지를 인수로 넣어주면 된다.
(코드에서 사용할 땐 소문자로 입력해준다.)
|
from django.contrib import messages # 메시지 모듈을 불러오고,
def view...(request):
...
messages.info(request, "비밀번호는 단방향 암호화 되어 보관됩니다.(관리자도 해독을 못한다는 사실!)")
return render(request, 'custom_account/signup.html', {'form': form})
| ||||||
탬플릿 수정 | 메세지는 {{ messages }} 안에 담기는데,
메시지는 대부분 모든 페이지에서 쓰이므로 base.html에 작성하는 편이 좋다. |
{% if messages %}
{% for message in messages %}
{% if message.tags %}<li >{{ message }}</li>{% endif %}
{% endfor %}
|
3 더 나아가기[편집 | 원본 편집]
3.1 부트스트랩[편집 | 원본 편집]
https://devlog.jwgo.kr/2020/10/17/fancy-messaging-system-in-django/를 참고하였다.
과정 | 설명 | 코드 |
---|---|---|
탬플릿 수정 | 클래스 안에 메시지 태그를 답는다. | {% for message in messages %}
<div class="alert {{ message.tags }} alert-auto-dismissible alert-dismissible notification-container text-center" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
{% endfor %}
|
settings.py 수정 | 메시지 태그가 부트스트랩과 일치하리라 기대하긴 어렵고.. settings에서 지정해준다.
|
from django.contrib import messages # 메시지를 임포트하는 것도 필요.
MESSAGE_TAGS = {
messages.DEBUG: 'alert-info',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
}
|
추가 | 위까지 진행하면 x를 눌러야 사라지는 메시지가 나타나지만, 직접 클릭하지 않고 지워져야 세련된 메시지라 할 수 있을 것이다.
우측 자바스크립트 코드를 탬플릿에 추가하자. |
<script>
window.setTimeout(function() {
$(".alert-auto-dismissible").fadeTo(500, 0).slideUp(500, function(){
$(this).remove();
});
}, 4000); // 초는 여기!
</script>
|
4 관련에러[편집 | 원본 편집]
4.1 TypeError: 'int' object is not callable[편집 | 원본 편집]
코드 내에서 사용할 때 messages.WARNING
처럼 대문자로 사용해서 그렇다. messages.warning
처럼 입력해보자.