首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 1.4 - {{ request.user.username}}不在模板中呈现

Django 1.4 - {{ request.user.username}}不在模板中呈现
EN

Stack Overflow用户
提问于 2012-04-15 09:29:39
回答 2查看 29K关注 0票数 9

在我看来,我可以打印request.user.username,但是在模板中,{{request.user.username}}没有出现。为了简单起见,我从函数中删除了逻辑,并导入了render_to_response & RequestContext。

代码语言:javascript
复制
from django.shortcuts import render_to_response
from django.template import RequestContext

@login_required
@csrf_protect
def form(request):
    print request.user.username
    data = {}
    return render_to_response('form.html', data, context_instance=RequestContext(request))   

我的猜测是我的settings.py有问题。

代码语言:javascript
复制
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'src',
)

提前感谢你的帮助-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-15 09:34:43

作为mentioned in the documentation,经过身份验证的用户的对象存储在模板的user变量中。提到的文档包括以下示例:

呈现模板RequestContext时,当前登录的用户( User实例或AnonymousUser实例)存储在模板变量{{ user }}中:

代码语言:javascript
复制
{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

编辑:感谢@buffer,他挖掘出了这个旧的答案,我已经用最新的状态更新了它。当它最初编写时,在Django 1.4 (于2012年3月底发布)后不到一个月的时间里,它是正确的。但是从Django1.5开始,获取用户名的正确方法是在用户模型实例上调用get_username()。这是由于能够交换User类(并有自定义字段作为用户名)而添加的。

票数 40
EN

Stack Overflow用户

发布于 2012-04-15 09:50:01

查看RequestContextTEMPLATE_CONTEXT_PROCESSORS的文档。

如果希望request位于模板上下文中,则需要在TEMPLATE_CONTEXT_PROCESSORS设置中包含django.core.context_processors.request。默认情况下,它不在那里。

然而,正如塔德克在他的回答中指出的那样,如果你正在使用默认设置,user已经可以使用了,因为django.contrib.auth.context_processors.authTEMPLATE_CONTEXT_PROCESSORS默认列表的一部分。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10158871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档