注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郁夫的博客

我爱你们,只是你们不知道!

 
 
 

日志

 
 
 
 

Django 1.2 Message框架尝鲜 - 转  

2011-02-22 09:46:56|  分类: Django |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一 介绍
Django1.2之前有个基于cookie 和session的Message框架,是针对验证用户的,现在Django1.2框架扩展了Message,让它也支持匿名用户。也就是说
用户不需要通过验证,即可用Message框架了。Message框架允许你临时存储信息到request里,然后取出来显示他们。每条信息由自己的level(等级)
来决定它们的显示优先级。比如:info 一般的信息,warning警告,或者error错误。
二启用Message框架
Message框架其实可以当成一个中间件类和相应的上下文处理器,这样更具通用性和简便性。要开启它,和往常的中间件一样,在settings.py模块MIDDLEWARE_CLASSES中,加入:
'django.contrib.messages.middleware.MessageMiddleware'
值得注意的是,它必须在session中间件之下,因为它是基于session的,比如:
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.messages.middleware.MessageMiddleware'
在settings.py模块TEMPLATE_CONTEXT_PROCESSORS中,加入:
'django.contrib.messages.context_processors.messages’
在settings.py模块 INSTALLED_APPS中,加入:
 'django.contrib.messages'
(其实你用Django1.2建立工程的时候已经默认开启了,你只需要检查一下)
三 使用
message包括不少的知识点,在这里不想完整描述,只是讲一下它的常用使用方法,还是老做法,我们模拟一下需求来讲解。
我们添加或者修改一条记录时,操作的过程中可能需要把一些信息呈现给用户知道,不管是用户的数据符合要求与否,或者是操作成功与否等等。这下Message就派上用场了。
比如在views中的一个action里:
from django.contrib import messages
def add(request)
    if info_error:
        ...
        messages.error(request, 'info error.')
    elif not info_error:
        ...
messages.warning(request, 'the info have not saved.')
        messages.info(request, 'info all right.')
在views的action里我们已经把要传递的信息存储到request的messages变量里了,我们现在可以呈现他们了:
在templates里这样编写:
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
message request变量里可以显示多条message(如上面的add,当not info_error时,messages就是两条),在templates里循环他们即可。
{% if message.tags %} class="{{ message.tags }}"{% endif %}
上面这段代码用处是,根据message的level给他们指定的class,如是错误信息,tags是error,具体的参考下面tags的种类:
DEBUG debug
INFO info
SUCCESS success
WARNING warning
ERROR error
我们在编写样式时,分别定义不同的tags的样式,呈现给用户的时候,就显得更友好了。
值得注意的是,messages是在本request周期内,如果到了下个request时,message自然就清空了。很酷呵呵。
这么说来,只要是在本request周期内的信息,我们可以在不同的页面上呈现他们。比如,一个action提交后,发现了一些不符合规定的表单数据,我们可以通过messages在本页面显示他们,但如果数据正确,我们跳到其他友好的页面,照样可以使用messages 来告诉用户,他们的数据提交成功了。
好了,就先简单尝试一下吧,要想了解更多的知识,请参考一下的英文文档:
http://docs.djangoproject.com/en/1.2/ref/contrib/messages/#ref-contrib-messages

 

转载需注明:panjj 原创文章 http://2goo.info/blog/panjj/Django/2010/06/14/98

  评论这张
 
阅读(452)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017