此 View 函数:
@login_required
def dashboard(request):
from myproject.myapp.models import UserProfile
k = UserProfile.objects.get( user=request.user.pk ).known
return render_to_response('dashboard.html', {'KNOWN': k, , context_instance=RequestContext(request))
传递到此模板:
{% if user.is_authenticated %}
{{ user.username }}
{% else %}
Login link
{% endif %}
{{ KNOWN }}
- 我已经登录。
- 页面不会重定向到 LOGIN_URL(因此@login_required 认为我已经登录)
- {{ KNOWN }} 渲染完全正常
- {{ user.username }} 未出现
这怎么可能?当然,如果 login_required 有效,并且它成功获取了 KNOWN,那么用户必须存在于某个地方?
我该如何调试这个?
:-)
更新: 如果我删除:
TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.request',)
从设置来看,它可以工作。
但是,通过删除它,在模板中使用 {{ request.get_full_path }} 的其他页面将不会加载。
哎呀。
更新2:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.request",)
如果您只是单独添加请求行,它将禁用所有其他默认值。哦!
更新3:以为可以解决这个问题,不幸的是仍然不起作用。
更新 4:在其他地方发现拼写错误,可以确认 Mark Lavin 的答案已修复它:)
最佳答案
如果您设置TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.request',)
,那么您将删除所有默认上下文处理器,特别是django.contrib.auth.context_processors。 auth
将 user
添加到上下文中。你应该使用
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
)
关于Django login_required 通过,但 user.is_authenticated 在模板中失败(??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9520342/