5

私のテンプレートには、次のものがあります。

        <ul class="tabbed" id="network-tabs">
            {% if user.is_authenticated %}
            <li><a href="{% url acct-my-profile %}">My Account</a></li>
            <li><a href="{% url acct-logout %}">Log Out</a></li>
            {% else %}
            <li><a href="{% url acct-login %}">Log in</a></li>
            <li><a href="{% url acct-register %}">Register</a></li>
            {% endif %}
        </ul>

作成されたページに @login_required デコレータがない限り、正常に動作しているように見えます。その場合、ページは正常に動作しますが、ナビゲーションは、ユーザーがログインしていてもログインしていないように見えます。

4

2 に答える 2

14

ビュー関数をチェックして、user変数がどこから来ているかを確認する必要があります。userビューからコンテキストに具体的に渡さない限り、それが問題です。

ただし、にアクセスすることはできますが、デコレータrequest.userを含むビューからレンダリングされたテンプレートでは、常にtrueが返されます。@login_required

ただし、デコレータに問題がないことを確実に伝えることができる理由は、Userand AnonymousUser(にあるdjango.contrib.auth.models)のコードでは、is_authenticatedメソッドが厳密にtrueUserとfalseを返すためAnonymousUserです。デコレータはそれを変更しませんし、変更することもできません。つまり、テンプレートが実際にUserチェックしているオブジェクトを取得していないということですuser

于 2010-07-26T21:03:02.560 に答える
8

ガブリエルの答えに続いて、user変数は認証コンテキストプロセッサから来ていますか? そうで、render_to_responseショートカットを使用している場合は、RequestContextインスタンスを使用する必要があります。

from django.template import RequestContext

...

@login_required
def some_view(request):
    # ...
    return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))
于 2010-07-26T22:29:21.880 に答える