作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我经常使用以下方法在我的 Django 应用 View 中向登录用户显示有关用户操作的消息:
request.user.message_set.create("message to user")
我如何为匿名(未登录)用户做同样的事情?匿名用户没有 request.user,但 Django 文档说使用“session”中间件你可以做与上面代码相同的事情。链接到 session 中间件的 Django 文档声称这是可能的,但我无法从 session 文档中找到如何做到这一点。
最佳答案
这就是我所做的,使用上下文处理器:
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 条消息,但是这就是我真正需要的,所以它对我有用。它可以很容易地更改为允许多条消息等。
关于python - 如何向 Django 站点中的匿名用户发送 session 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697902/
我是一名优秀的程序员,十分优秀!