2009-06-28 2 views
6

私は小さな社会的なアプリケーションを書いています。機能の1つは、サイトのヘッダーにユーザー名を書き込むことです。私がログインしていますし、私の名前はオレグ(ユーザー名)であれば、たとえば、私が表示されるはずです。Django:どのようにすべてのビュー(django)から現在のユーザー名を書く

こんにちは、オレグ|そうでなければ、私のようなものを参照する必要があり

をプロファイル編集をクリックしてください:私が欲しいもの-サインアップまたは

に参加してください

こんにちは私のサイトのすべてのページでこれを示すことです。明らかな解決策は、私のサイトのすべてのビューにrequest.userオブジェクトを渡すことです。しかし、ここでhttp://www.willmer.com/kb/category/django/ は、私は単純に有効にすることで、任意のテンプレートからリクエストオブジェクトにアクセスできることをお読みください。

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request', 
) 

わからない、なぜそれが実際に動作しませんでした:(

たぶん誰かが私を助けることができるし、あなたはコンテキストのpを設定したら解決策を提案する?

どうもありがとう、

オレグ

答えて

7

また、要求コンテキスト全体を必要としない場合は、django.core.context_processors.requestの代わりにdjango.core.context_processors.authを使用する必要があります。次に、入力するだけで簡単に

Hello {{ user.get_full_name }} 

と入力することができます。

render_to_response(またはdirect_to_template)に電話する際には、context_instance=RequestContext(request)を忘れずにお送りください。

+0

一般的なビューにはすでにcontext_instanceが設定されているため、{{user}}変数は既に使用可能です。 –

0

その要求は、requestという名前の変数としてテンプレートに渡されます。以内にあなたがそれをドリルダウンする必要がある変数ユーザオブジェクトにアクセスするには:ここで

{{ request.user }} 

list of attributes stored in the Django Request objectです。具体的には、user attributeです。

1

django.template輸入RequestContextの

代わりのdjango.template輸入コンテキストから

から使用

だから今だけ呼び出すRequestContextの(リクエスト、コンテキスト)

詳細here

6

おそらく2つの問題があります。

最初に、TEMPLATE_CONTEXT_PROCESSORSを再定義すると、デフォルトを上書きしますが、これはおそらく良い考えではありません。既定では、この設定には既にauthプロセッサが含まれています。この場合、userという変数が使用されます。あなたは間違いなく、同様requestが必要な場合は、あなたがこれを行う必要があります(+=気づく):コンテキストプロセッサを使用した場合のドキュメントhereで説明したように

TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request', 
) 

第二に、あなたがあなたのテンプレートにRequestContextのを使用していることを確認する必要があります。あなたがrender_to_responseを使用している場合は、このようにそれを行う必要があります。

return render_to_response('my_template.html', 
          my_data_dictionary, 
          context_instance=RequestContext(request)) 
0
{% if user.is_authenticated %} 
<p>Welcome, {{ user.username }}. Thanks for logging in.</p> 
{% else %} 
<p>Welcome, new user. Please log in.</p> 
{% endif %} 

すでに設定TEMPLATE_CONTEXT_PROCESSORSを持っている場合は十分だろう。

0

私はちょうどlocals()を追加することで問題を解決できると思います。

return render_to_response('my_template.html', 
         my_data_dictionary,locals())