使用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))
答案 0 :(得分:4)
您使用RequestContext呈现模板吗?除非您这样做,否则不会应用上下文处理器。
答案 1 :(得分:0)
见django-postman discards RequestContext。有了这个你分配TEMPLATE_CONTEXT_PROCESSORS 2个项目,你就会覆盖默认项目。