已验证但user.is_authenticated仍为false

时间:2011-01-20 22:29:45

标签: python django google-app-engine django-nonrel

使用GAE / Django-nonrel创建简单的应用程序(我不认为这个问题特定于GAE或nonrel fork,最像是PEBKAC作为python / django noob,并且会在基本的django安装时出现。)

我正在使用django.contrib.auth进行身份验证。

在settings.py中

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware', )

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request', )

我已经使用manage.py

创建了超级用户

我在模板base.html中有以下内容,{} extends'base.html'%}

在其他模板中使用
{% if user.is_authenticated %} 
    Hello {{ user.username }} 
    [<a href="{% url django.contrib.auth.views.logout %}">sign out</a>] 
{% else %} 
    [<a href="{% url django.contrib.auth.views.login %}">sign in</a>] 
{% endif %} 

在urls.py中标准认证内容(来自django.contrib.auth.forms导入AuthenticationForm等)。

问题是我可以成功验证,用户名/密码检查工作(不能使用不正确的用户/密码),我在管理页面上验证 - 但不在其他页面上验证 - 或者说我是,但用户是null(无)。

我认为“django.contrib.auth.context_processors.auth”是实现这一目标的神奇之处,但如上所示在settings.py中设置。

有关如何追踪此问题的任何提示?

编辑(扩展Daniels的答案,因为无法在评论中进行代码格式化)

在views.py中的

我有: -

def detail(request):
    obj = get_object_or_404(MyModel, pk=some_id)    
    return render_to_response('myapp/index.html', {'MyModel': obj})

应该是

    return render_to_response('myapp/index.html', {'MyModel': obj}, RequestContent(request))

2 个答案:

答案 0 :(得分:4)

您使用RequestContext呈现模板吗?除非您这样做,否则不会应用上下文处理器。

答案 1 :(得分:0)

django-postman discards RequestContext。有了这个你分配TEMPLATE_CONTEXT_PROCESSORS 2个项目,你就会覆盖默认项目。