2012-04-15 25 views
9

Benim görüşüme göre request.user.username yazdırabilirim, ancak şablonda {{request.user.username}} yok görünür. Bunu kolaylaştırmak için, mantığı işlevden kaldırdım ve render_to_response & RequestContext dosyasını içe aktarıyorum.Django 1.4 - {{request.user.username}} şablonda gösterilmiyor

from django.shortcuts import render_to_response 
from django.template import RequestContext 

@login_required 
@csrf_protect 
def form(request): 
    print request.user.username 
    data = {} 
    return render_to_response('form.html', data, context_instance=RequestContext(request)) 

Tahminim, benim settings.py ile ilgili bir sorunum var. senin Yardım- için şimdiden

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', 
    'django.contrib.admindocs', 
    'src', 
) 

Teşekkür

cevap

37

mentioned in the documentation gibi, yetkilendirilmiş kullanıcıların nesne şablonları user değişken içinde saklanır.

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p> 
{% else %} 
    <p>Welcome, new user. Please log in.</p> 
{% endif %} 
:

bir User örneği veya bir AnonymousUser örneği, ya bir şablon RequestContext, giriş yapmış olan kullanıcı oluşturma, şablon değişken {{ user }} depolanır: Söz konusu belgeler, aşağıdaki örnek içerir

DÜZENLEME: Bu eski yanıtı kandıran Buffer sayesinde, en son durumla güncelledik. Orijinal olarak yazıldığı zaman, Django 1.4'ün (Mart 2012'nin sonunda piyasaya sürülen) bir aydan kısa bir sürede, bu doğruydu. Ama Django 1.5, kullanıcı adı almak için uygun bir yöntem, kullanıcı modeli örneğinde get_username() aramaktır. Bu, User sınıfını takas etme (ve kullanıcı adı olarak özel alana sahip olma) nedeniyle eklenmiştir.

+0

Bir kullanıcı nesnesini şablona iletebilirim, ancak oturum açmış kullanıcıya istek üzerine erişilemiyor mu? İstek şablondan erişilebilir değil gibi görünüyor, ancak görünümde. – Emile

+0

İyi ilginç. Bu doğru - {{request.user.username}} (önceki projelerde kullandığım) yerine {{user.username}} çalışır. Yardım için teşekkürler @tadeck! – Emile

+0

'user.get_username' işlevinin 'user.username' üzerinden kullanılması tercih edilir: https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.get_username – Medorator

5

RequestContext ve TEMPLATE_CONTEXT_PROCESSORS belgelerine bakın. Eğer şablon bağlamında olmak request istiyorsanız

, o zaman TEMPLATE_CONTEXT_PROCESSORS ortamda django.core.context_processors.request dahil etmek gerekir. Varsayılan olarak orada değil. Tadeck onun cevabını da belirttiği gibi varsayılan ayarları kullanıyorsanız django.contrib.auth.context_processors.authTEMPLATE_CONTEXT_PROCESSORS için varsayılan listenin parçası olduğu için

Ancak user, zaten mevcuttur.

+0

Açıklama için teşekkürler Brian. Kaybettiğim bilgi bu. TEMPLATE_CONTEXT_PROCESSORS varsayılan projelerden kaldırıldı mı? Sadece onları eklemeyi unutmuş olabilirim, ama bir süredir. – Emile

+0

@EmilePetrone Geçerli startproject komutunun "TEMPLATE_CONTEXT_PROCESSORS" ile bir settings.py oluşturduğunu sanmıyorum. Bir seferde olabilir, ama emin değilim. –

+0

@BrianNeal: Kullanıcıyı şablonlara aktarmak istemiyorum. Kalıcı olarak devre dışı bırakmanın bir yolu var mı? – user1050619