在我看来,我可以打印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))

我的猜测是我的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',
)

在此先感谢您的帮助-

最佳答案

作为mentioned in the documentation,经过身份验证的用户对象存储在模板的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 %}

编辑:多亏@buffer挖出了这个旧答案,我已将其更新为最新状态。最初编写时,距Django 1.4(于2012年3月底发布)不到一个月的时间,它是正确的。但是从Django 1.5开始,获取用户名的正确方法是在用户模型实例上调用 get_username() 。由于能够交换User类(并具有自定义字段作为用户名),因此已添加该文件。

10-06 15:49