[英]The @login_required decoration is not working in Django (user not 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 }}
這怎么可能? 當然,如果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.