2016-07-18 58 views
1

我怎樣才能把一個特定的用戶對象放到我的模板中?我知道如果我創建一個上下文處理器,我可以做這樣的循環:用Django上下文處理器即時獲取特定的用戶字段?

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

但是,這將循環所有這些。如果我想通過運行獲得用戶配置文件字段,我該怎麼做?

類似下面這樣的僞代碼:

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

基於子域我對我有那就是用戶名和域名,我想用它來抓取用戶的相關信息。我怎麼能得到用戶配置文件?

+1

你需要更具體。 「用戶名」從哪裏來?爲什麼不能從視圖或上下文處理器發送數據? –

+0

首先,您應該在您的控制器中創建函數,該函數根據特定參數返回您需要的特定字段,例如'user_id'。 – user3041764

+0

@DanielRoseman我可以從上下文處理器發送數據,但不能發送視圖。我不知道如何在上下文處理器中編寫代碼來完成我想實現的目標。 –

回答

1

如果這是要一個子中的每一頁上使用,你可以創建一個template context processor

上下文處理器有一個非常簡單的接口:這只是一個Python函數,它接受一個參數,一個HttpRequest對象,並返回一個添加到模板上下文的字典。每個情境處理器必須返回一個字典。

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':無}」。您還必須改進域解析。 –

相關問題