我常常显示有关的用户动作的消息来登录用我Django应用程序用户意见:

request.user.message_set.create("message to user")

我怎么能这样做匿名(不登录)的用户一样吗?没有request.user为匿名用户,但Django的文件说,在基于“会话”中间件你可以做同样的事情,上面的代码。链接到会话中间件Django文档声称它是可能的,但我无法找到如何从会议文件做到这一点。

有帮助吗?

解决方案

请参阅 http://code.google.com/p/django-session -messages / 直到能够在Django树基于会话的消息的土地(因为我看到最近,它被标记为1.2,所以没有希望快速另外...)。

补丁

具有类似功能的另一个项目是Django的闪存( http://djangoflash.destaquenet.com/

其他提示

这是我做什么,使用上下文处理器:

project/application/context.py(检查邮件并把它们添加到上下文):

def messages(request):
    messages = {}
    if 'message' in request.session:
        message_type = request.session.get('message_type', 'error')
        messages = {'message': request.session['message'],
                    'message_type': message_type}
        del request.session['message']
        if 'message_type' in request.session:
            del request.session['message_type']
    return messages

project/settings.py(添加上下文到TEMPLATE_CONTEXT_PROCESSORS):

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.core.context_processors.debug",
    "django.core.context_processors.media",
    "django.core.context_processors.auth",
    "project.application.context.messages",  
)

使用的功能messages上面会在每次请求和任何它返回将被添加到模板的上下文中调用。有了这个地方,如果我想给用户一个消息,我可以做到这一点:

def my_view(request):
    if someCondition:
        request.session['message'] = 'Some Error Message'

最后,在模板你可以检查是否有错误显示:

{% if message %}
    <div id="system_message" class="{{ message_type }}">
        {{ message }}
    </div>
{% endif %}

消息类型只是用来取决于它是什么(“错误”,“通知”,“成功”),并认为这是安装程序,你只能在一个时间为用户添加1个消息的方式的风格,但这是所有我真的永远都需要,因此对我的作品。它可以被容易地改变,以允许多个消息和这样。

直接在会话中,这是一种类似字典的对象存储数据。然后,在观看/模板,则检查该值。

这里的更多信息:

HTTP://文档。 djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views

您还可以创建一个中间件类来检查每个请求的会话对象,并完成你的构建上/推倒在那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top