2011-12-29 12 views
4

ユーザーがログインしていないときに「ログイン」と「登録」を表示するナビゲーションバーがあります。ユーザーがサインインすると、ナビゲーションバーにユーザーの名前と彼が自分の受信トレイにあるメッセージ複数のビューのユーザー統計情報を含む

ナビゲーションページは約50ページに存在するため、ユーザー情報を取得してテンプレートに送信する必要があるビュー機能は約50あります。私が後でこれを変更したいのであれば、それは苦痛になるでしょう!

{% if user %} 
... 
{% else %} 
.... 
{% endif %} 
:私のナビゲーションバーにはコードが含まれているため

def index(request): 
    user = request.user 
    ... 
    return render_to_response("page.html", {'user': user}) 

私は、ナビゲーションバーを持つ任意のページにユーザーに関するたびに情報を送信する必要があります。

例えば

は、ここでの例の図です。

これを行うよりクリーンな方法はありますか?

編集:また、テンプレートに送信するUserProfileモデルもあります。これを行う方法はありますか?

+0

あなたはあなたのテンプレートレンダラにRequestContextのを渡す必要があります:あなたの意見で

、あなたは単に必要とされているRequestContextのインスタンスを作成するの世話をするrenderショートカットを使用することができますコンテキスト・プロセッサーと、request.userがテンプレート・コンテキストに入るという事実です。 –

答えて

2

最も簡単な方法は、settings.pyのをTEMPLATE_CONTEXT_PROCESSORSの設定に含めることです。 in the docsと記載されているように、テンプレートコンテキストに変数userpermsを追加すると、現在のユーザーに直接アクセスできます。

ないTEMPLATE_CONTEXT_PROCESSORSのデフォルト設定では、この(ジャンゴ1.3)であること:あなたがそれを返さずに、あなたのテンプレートでuser変数にアクセスすることができるはず

("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") 

だから、コンテキストプロセッサが既にあるべきアクティブウントは、ビューに表示されます。あなたはの利点を活用できるよう

from django.shortcuts import render 

def my_view(request): 
    return render(request, 'template.html') 
+1

テンプレートをレンダリングするためには、RequestContextを使用するか、内部的に使用する「レンダリング」ショートカットを使用する必要があることに注意してください。 –

+0

hin @DanielRosemanに感謝します。私は答えを更新しました。 –

+0

こんにちは、ユーザーモデルに加えてUserProfileモデルへのアクセスが可能ですか? – egidra

2

DrTyrsaが提案するようにカスタムテンプレートタグを作成するか、context processorを作成することができます。

+0

このタスクのコンテキストプロセッサの例を表示できますか?コンテキストに何を追加する必要がありますか?ログインフォーム?登録リンク?統計情報(ユーザーがログインしていない場合に追加するもの)? – DrTyrsa

+0

あなたのプロセッサは、あなたのテンプレートで使用されるコンテキストにデータを追加するだけです。 –

+0

@ThomasOrozcoさて、実装を確認できますか?私の指摘は、コンテキスト・プロセッサーはコンテキストにオブジェクトを追加するだけで、それ以上のことはありません。どのオブジェクトを追加するか、どのオブジェクトを追加するかなどのロジックは、タグに入れておく必要があります。これははっきりしており、「プロセッサが私にこのオブジェクトを与えたもの」のような質問は発生しません。 – DrTyrsa

0

あなたはすべてのビューにユーザーを送信する必要がなぜ、HttpRequestは、ユーザーが含まれていますがログインしているとき、あなたは簡単にテンプレートにアクセスすることができます。

と別のソリューションは、sessionsにユーザーを保存し、それにアクセス任意のビューまたはテンプレートで

関連する問題