2016-07-18 5 views
1

テンプレートに特定のユーザーオブジェクトを取得するにはどうすればよいですか?コンテキストプロセッサを作成すると、このようなforループを実行できることが分かります。Djangoコンテキストプロセッサで特定のユーザフィールドをオンザフライで入手できますか?

{% for user in users %} 
    {{ user.profile.about }} 
{% endfor %} 

しかし、それらはすべてループします。ユーザープロフィールフィールドを即時に取得したい場合は、、どうすればいいですか?

以下、この擬似コードのようなもの:私は私の上だサブドメインに基づいて

{{ user.profile.about <username> }} 

は、私は、ユーザーに関する情報をつかむためにそれを使用するだけでなく、ユーザ名であるドメインを持っています。どのようにしてユーザープロファイルを取得できますか?

+1

もっと具体的にする必要があります。 'username'はどこから来ますか?ビューやコンテキストプロセッサからデータを送信できないのはなぜですか? –

+0

まず、特定のパラメータに基づいて必要な特定のフィールドを返す、例えば 'user_id'のような、あなたのコントローラに関数を作成する必要があります。 – user3041764

+0

@DanielRoseman私はコンテキストプロセッサからデータを送信できますが、ビューは送信できません。コンテキストプロセッサにコードを書く方法を私が達成したいことをするのか分からない。 –

答えて

1

これは、サブドメイン内のすべてのページで使用する場合は、あなたがtemplate context processorを作成することができます。

コンテキストプロセッサは、非常にシンプルなインターフェイスを持っている:それはHttpRequestの、一つの引数を取るだけでPythonの関数ですオブジェクトを作成し、テンプレートコンテキストに追加される辞書を返します。各コンテキストプロセッサは、辞書を返す必要があります。

from django.contrib.auth import get_user_model 
from django.shortcuts import get_object_or_404 

def user_subdomain(request): 
    host = request.META['HTTP_HOST'] 
    subdomain = host.split('.')[0] # Or whatever more accurate parsing if needed 
    User = get_user_model() 
    user = get_object_or_404(User, username=subdomain) 
    return { 
     'subdomain_user': user, # avoid naming it `user` as this is 
           # the current signed in user 
    } 

そして、あなたの設定にこのコンテキストプロセッサを追加します。

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     ... 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       ... 
       'yourapp.context_processors.user_subdomain', 
      ], 
     }, 
    } 
] 

次に、あなたのテンプレートで、あなたは{{ subdomain_user }}としてこのユーザーを取得することができます。

+0

ただ一つの質問です。私がサブドメインにいないなら、どうすればそれを文脈に戻せないのですか? –

+0

有効なサブドメインが見つからない場合は、空の辞書または '{'subdomain_user':None}'を返すことができます。また、ドメインの解析を改善する必要があります。 –

関連する問題