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

Emi*_*ile 9 django django-templates

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

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))   
Run Code Online (Sandbox Code Playgroud)

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

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',
)
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助-

Tad*_*eck 40

文档中所述,经过身份验证的用户对象存储user在模板中的变量中.提到的文档包括以下示例:

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

{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@buffer,他挖出了这个旧的答案,我已经用最近的状态更新了它.在最初编写时,在Django 1.4(2012年3月底发布)后不到一个月的时间内,这是正确的.但是自从Django 1.5以来,获取用户名的正确方法是调用get_username()用户模型实例.由于能够交换User类(并将自定义字段用作用户名),因此添加了此项.


Bri*_*eal 5

查看RequestContextTEMPLATE_CONTEXT_PROCESSORS的文档.

如果您想要request进入模板上下文,则需要django.core.context_processors.request在您的TEMPLATE_CONTEXT_PROCESSORS设置中加入.它默认不存在.

但是,user如果您使用默认设置,Tadeck在他的回答中指出已经可用,因为它django.contrib.auth.context_processors.auth是默认列表的一部分TEMPLATE_CONTEXT_PROCESSORS.