博客五部曲之一 - 简单博客
1461 浏览 5 years, 11 months
22 Django消息框架
版权声明: 转载请注明出处 http://www.codingsoho.com/我们打算在一个表单更新成功之后显示一个成功提示的消息
def post_create(request):
form = PostForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, "successfully created")
return HttpResponseRedirect(instance.get_absolute_url())
else:
messages.error(request, "not successfully created")
context = {
'form':form
}
return render(request, 'post_form.html', context)
在成功和失败的分支里,分别用message.success和message.error来显示错误消息。
要显示message,我们在post_detail.html里加入下面语句
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
更多关于message的细节可以参考下面文档 https://docs.djangoproject.com/en/1.11/ref/contrib/messages/
message里面有一个参数extra_tag,这个参数会添加到message的class里面。下面演示一下如何使用
在post_update的消息显示代码行,添加extra_tags “html_safe”,同时消息里面插入html代码
def post_update(request, id=None):
instance = get_object_or_404(Post, id=id)
form = PostForm(request.POST or None, instance=instance)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, "<a href='# '>item</a> saved", extra_tags="html_safe")
return HttpResponseRedirect(instance.get_absolute_url())
context = {
'form':form,
"title" : instance.title,
"instance" : instance
}
return render(request, 'post_form.html', context)
在post_form.html里添加关于这个tag的判断,如果包含html_save,那么message内容添加safe filter,以保证按HTML格式解释这段代码,否则它会将原生的HTML代码显示出来。
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{% if "html_safe" in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %}</li>
{% endfor %}
</ul>
{% endif %}