在做web系統的時候,我們需要針對一些操作的結果要進行提示信息給用戶,如“××××保存成功!”,“××××出現錯誤!”。
在基於mvc的模型的框架下,我們可以採用flash message的方式。
以前在用web2py框架的時候,主要寫:
response.flash = '訂購%s成功'% foods[0].name
就會自動在上方提示response.flash的信息。
一.Django admin的提示信息
但是django沒有flash,我們在使用django admin的時候,我們也看到了保存了一個對象成功後,會在列表的上方出現提示信息,這是如何做到的呢?
查看其源碼,我麼可以看到:
request.user.message_set.create(message="Your playlist was added successfully.")
在template中增加如下代碼:
{% if messages %}
<ul class="messagelist">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
在設置一下messagelist央視,就達到了和django admin一樣的提示信息效果。
但是這種提示信息,需要依賴request.user,如果沒有進行登錄,則無法實現。
具體查看django document:
http://docs.djangoproject.com/en/dev/topics/auth/#messages
二.Flash Message Template Tag
接下來我們使用Flash Message Template Tag來實現。
具體實現方式查看Flash Message Template Tag的文檔。
http://www.djangosnippets.org/snippets/319/
注意:django最新版本中需要修改其中的一段代碼:
原文中的57-58的代碼修改如下:
if ret is not None:
context.update(ret)
return self.nodelist.render(context)
你可以將
>>>request.session['flash_msg'] = 'Your changes have been save'
>>>request.session['flash_params'] = {'type': 'success'}
封裝的使用更友好一點如:
#coding=utf-8
def add_msg(request,msgtype,msg):
request.session["flash_msg"] = msg
request.session["flash_params"] = {'type': msgtype}
def add_success_msg(request,msg):
add_msg(request,'success',msg)
def add_error_msg(request,msg):
add_msg(request,'error',msg)
這樣你就可以:
flash.add_success_msg(request,'保存成功!')
flash.add_error_msg(request,e.msg)
就可以實現了Flash Message.