2

这个视图函数:

@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 }}
  1. 我已经登录了。
  2. 页面未重定向到 LOGIN_URL(因此我猜@login_required 认为我已登录)
  3. {{ KNOWN }} 渲染完全OK
  4. {{ 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 的回答修复了它:)

4

2 回答 2

3

如果您正在设置,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",
)
于 2012-03-01T17:11:22.223 回答
1

您应该保留 django.core.context_processors.request,它允许在模板中使用 {{ request }}。

请求对象具有用户属性,该属性应对应于请求页面的用户。

试试这个,它也应该对你有用:

{% if request.user.is_authenticated %}
    you're authenticated as {{ request.user.username }}
{% else %}
    i'm a guest
{% endif %}
于 2012-03-01T17:02:40.460 回答