Django中的flash message

在做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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章