簡體   English   中英

Django login_required通過但模板中的user.is_authenticated失敗(??)

[英]Django login_required passes but then user.is_authenticated fails in the template (??)

此視圖功能:

@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}}呈現完全正常
  4. {{user.username}}沒有出現

這怎么可能? 當然,如果login_required可以正常工作,並且設法獲得了KNOWN,那么用戶必須存在於某個地方嗎?
我該如何調試?

:-)


更新:如果我刪除:

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

通過設置,它可以工作。
但是,通過刪除該頁面,不會加載模板中使用{{request.get_full_path}}的其他頁面。
Eeek。


更新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",)

如果僅添加請求行,則會禁用所有其他默認行。 D'哦!


更新3:認為可以解決此問題,但仍然無法正常工作。


更新4:在其他地方發現錯別字,可以確認馬克·拉文的答案已解決:)

如果您設置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.core.context_processors.request,它允許在模板中使用{{request}}。

請求對象具有用戶屬性,該屬性應與請求頁面的用戶相對應。

試試這個,它也應該為您工作:

{% if request.user.is_authenticated %}
    you're authenticated as {{ request.user.username }}
{% else %}
    i'm a guest
{% endif %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM