Jeff的妙想奇境

产品经理,技术爱好者(Java, Django 等),音乐教师,好老公…… ...

↑我也要推荐

Django Message 框架尝鲜

发布时间:2011-06-29 13:13:10, 关注:+6565, 赞美:+18, 不爽:+7

原始出处: 在成都安家

一 介绍

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 来告诉用户,他们的数据提交成功了。

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠