0

こんにちは私はdjangoプロジェクトを書いています、そして私はこのようなテンプレートコードを書きます:

            <ul id="nav">
                <li><a href="/">Home</a></li>
                <li><a href="/user/">Users</a></li>
                {% if user %}
                    <li><a href="/user/{{ user.id }}/">Settings</a></li>
                    <li><a href="/logout/">Log Out</a></li>
                {% else %}
                    <li><a href="/login/">Log In</a></li>
                    <li><a href="/signup/">Sign Up</a></li>
                {% endif %}
            </ul>

ログインビューでは、次のように記述します。

def login(request):
    if user_logged_in(request):
        return redirect('/')
    if request.method == 'GET':
        form = LogInForm()
        return render_to_response(LOGIN_PATH, {'form':form}, context_instance=RequestContext(request))

しかし、サーバーを実行すると、ユーザーがログインしておらず、ログインページにアクセスすると、[設定]と[ログアウト](コンテキスト内にユーザーオブジェクトがあります)が表示されますが、表示されないはずです。

RequestContextを削除すると、たとえばreturn render_to_response(LOGIN_PATH、{'form':form})とすると、問題ありません。と

return render_to_response(LOGIN_PATH, {'form':form, 'user':None}, context_instance=RequestContext(request))

大丈夫です。しかし、私はそれをしたくありません。

私はそれが汚いデザインであることを知っています、まあ...私は提案と解決策を探しています。どうもありがとう〜!

4

2 に答える 2

1
{% if user.is_authenticated %}

タグは、認証されたオブジェクトではなく、ユーザー オブジェクトをチェックするだけです。

認証ユーザーでできることの詳細については、ここを確認してください:)

于 2012-10-17T10:08:02.880 に答える
0

TEMPLATE_CONTEXT_PROCESSORSincludesのデフォルト設定"django.contrib.auth.context_processors.auth"。このコンテキスト プロセッサは、usercotnext に を追加します。これは、ユーザーが要求で提供されない場合は匿名になります。

ユーザーがテンプレートで認証されているかどうかを知りたい場合は、@Samuele Mattiuzzoの回答を使用する必要がありますが、何らかの理由でユーザーをコンテキストに含めたくない場合は、必要です認証コンテキスト プロセッサを使用せずに、デフォルトの TEMPLATE_CONTEXT_PROCESSORS 設定を変更します。

詳細については、ドキュメントまたはコードを参照してください。

于 2012-10-17T10:14:47.550 に答える