私がこれを以前に尋ねたときにあなたが私を助けようとしたならば、すみません。何らかの理由で追加情報を編集することが許可されていなかったため、その質問を削除する必要がありました。
Djangoウェブサイト。すべてが動作します。ビュー、モデル、URLなどがすべて設定されています。ユーザーは登録、ログイン、ログアウトできます。私が持っている問題は、このコードのビットです:
{% if request.user.is_authenticated %}
<li><a href="/logout">Log Out</a></li>
{% else %}
<li><a href="/login">Log In</a></li>
{% endif %}
ログインしていても、「ログアウト」ではなく「ログイン」がオプションとして表示されます。ただし、リンクをクリックすると、/ profileにリダイレクトされます。これは、ログインしている場合にビューに表示されるためです。したがって、ログインしていることは明らかですが、テンプレートはそうではありませんreadint user.is_authenticatedがtrueである。
ログイン要求に関連するビューは次のとおりです。
def LoginRequest(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/profile/')
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
profile = authenticate(username=username, password=password)
if profile is not None:
login(request, profile)
return HttpResponseRedirect('/profile/')
else:
return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
else:
return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
else:
''' user is not submitting the form, show them login form '''
form = LoginForm()
context = {'form': form}
return render_to_response('template/login.html', context, context_instance = RequestContext(request))
認証コンテキストプロセッサが有効になっている場合、user
は既にテンプレートコンテキストにあり、次のことができます。
{% if user.is_authenticated %}
テンプレートのrequest
にアクセスする場合は、 request context processor が有効になっていることを確認してください。
あなたの質問では、render_to_response
を使用しています。 Django 1.3以降、render_to_response
の代わりにrender
を使用したほうがよい。RequestContext(request)
でrender_to_response
を使用すると、 Django <= 1.9、ただしDjango 1.10以降では、コンテキストプロセッサを動作させるにはrender
ショートカットを使用する必要があります。
return render(request, 'template/login.html', context)
Django 1.1から_is_authenticated
_が@ propertyで装飾され、動作が異なることに注意してください。
[〜#〜] unauthenticated [〜#〜]ユーザーが{{user.is_authenticated}}を呼び出した結果:
CallableBool(True)
(Django <1.10の場合はTrue
でした)
[〜#〜] authenticated [〜#〜]ユーザー呼び出し{{user.is_authenticated}}の結果:
CallableBool(False)
(Django <1.10の場合はFalse
でした)
true
やfalse
などのjavascript値に渡す必要がある場合は、フィルター_|yesno:"true,false"
_を適用してそれを行うことができます。
_<script language="javascript">
var Django_USER = "{{user.is_authenticated|yesno:"true,false"}}";
</script>
_