无论我如何到达那里,在每个页面上都在 Django 中获取用户名
Getting username in Django on every single page regardless of how I got there
这是理论问题,而不是具体的代码问题。
我有点困惑用户名、用户电子邮件等信息在 Django 中是如何存储和访问的。
据我所知:
我可以像 {{user.username}}
一样访问它,如果我以前通过使用 render()
或 render_to_response()
和里面的 RequestContext 到达这里。如果我使用 HttpResponseRedirect
进入页面,那么我无法访问 user.username
,这里只是空白。
我想知道的:
无论我是如何到达那里的,有没有办法从每个页面访问用户数据?我的意思是即使我根本不使用任何视图,比如手动输入地址。
奇怪的是,我一直认为像用户名这样的数据可以通过会话访问,但是关于这个主题的 10 篇文章中有 9 篇总是谈论 RequestContext 和其他将值从一个页面传递到另一个页面的东西。
我还阅读了有关自定义上下文处理器的内容,但我认为它仅适用于特定目的,而不是简单的用户名。
所以也许简而言之,问题是:
如果我想在网站每个页面的角落显示例如用户名 - 我应该怎么做?
这里发生了什么(傻瓜)
HttpResponseRedirect 根本不影响任何东西。问题是它正在重定向到不包含 RequestContext 的 render_to_response() 调用。如果我们不指定 RequestContext,它会将其写为空白并强制它覆盖 context_processor.auth 提供的会话数据,因此您在此页面上基本上没有任何上下文数据。
应该怎么做(在我看来)是你总是在你的任何视图中使用 render() 或 render_to_response() 和 RequestContext,不要忘记它。完全不用担心各种重定向,因为它们不会影响上下文数据。静态 html 页面从处理器获取上下文数据,它工作正常,我的错我没有事先检查两次。
只输出{{ user.username }}
。如果用户已登录,某些 auth middleware and django.contrib.auth.context_processors.auth
上下文处理器已启用,则将显示用户名。
中间件从会话中获取用户 ID,从数据库中加载 User
并设置 request.user
属性。然后上下文处理器获取 request.user
属性并将其作为 user
变量注入到 RequestContext 中。
要使 user
变量在您的模板中可用,您应该使用 render()
快捷方式。或者 render_to_response()
与 RequestContext
作为 context_instance
参数。
这是理论问题,而不是具体的代码问题。
我有点困惑用户名、用户电子邮件等信息在 Django 中是如何存储和访问的。
据我所知:
我可以像 {{user.username}}
一样访问它,如果我以前通过使用 render()
或 render_to_response()
和里面的 RequestContext 到达这里。如果我使用 HttpResponseRedirect
进入页面,那么我无法访问 user.username
,这里只是空白。
我想知道的:
无论我是如何到达那里的,有没有办法从每个页面访问用户数据?我的意思是即使我根本不使用任何视图,比如手动输入地址。
奇怪的是,我一直认为像用户名这样的数据可以通过会话访问,但是关于这个主题的 10 篇文章中有 9 篇总是谈论 RequestContext 和其他将值从一个页面传递到另一个页面的东西。
我还阅读了有关自定义上下文处理器的内容,但我认为它仅适用于特定目的,而不是简单的用户名。
所以也许简而言之,问题是:
如果我想在网站每个页面的角落显示例如用户名 - 我应该怎么做?
这里发生了什么(傻瓜)
HttpResponseRedirect 根本不影响任何东西。问题是它正在重定向到不包含 RequestContext 的 render_to_response() 调用。如果我们不指定 RequestContext,它会将其写为空白并强制它覆盖 context_processor.auth 提供的会话数据,因此您在此页面上基本上没有任何上下文数据。
应该怎么做(在我看来)是你总是在你的任何视图中使用 render() 或 render_to_response() 和 RequestContext,不要忘记它。完全不用担心各种重定向,因为它们不会影响上下文数据。静态 html 页面从处理器获取上下文数据,它工作正常,我的错我没有事先检查两次。
只输出{{ user.username }}
。如果用户已登录,某些 auth middleware and django.contrib.auth.context_processors.auth
上下文处理器已启用,则将显示用户名。
中间件从会话中获取用户 ID,从数据库中加载 User
并设置 request.user
属性。然后上下文处理器获取 request.user
属性并将其作为 user
变量注入到 RequestContext 中。
要使 user
变量在您的模板中可用,您应该使用 render()
快捷方式。或者 render_to_response()
与 RequestContext
作为 context_instance
参数。