Her zaman Django şablon bağlamında kullanıcıyı dahil

oy
27

Ben kullanıcı göndermek mümkün olmalıdır küçük bir şirket, küçük bir intranet sitesi üzerinde çalışıyorum. İnsanların sadece kendi e-posta adresini girin çok basit bir kimlik doğrulama mekanizması hayal ve her zaman gelecek istekler için onları tanımlayacak bir çerez bir benzersiz giriş url, gönderilen alır.

Benim şablon kurulumunda, ben base.html var ve diğer sayfaları bu genişletmek. Giriş yaptım göstermek veya base.html düğmesini kaydetmek istediğiniz ama gerekli değişkenler her zaman bağlamın bir parçası olduğunu nasıl emin olabiliriz? Her görünüm sadece istedikleri gibi bağlamı kurar gibi görünüyor ve hiçbir küresel bağlam nüfus bulunmaktadır. Her bağlam yaratma kullanıcı dahil etmeden bunu yapmanın bir yolu var mı?

Ya da düzgün bağlam kurulum için kendi özel kısayollar yapmak zorunda kalacaktır?

Oluştur 03/09/2008 saat 13:22
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
2

Eğer içine kimlik kanca Eğer Django kimlik doğrulama şeması kullanmak mümkün olacak request.user.

Bu sadece çağıran bir durum olması gerektiğini düşünüyorum authenticate()ve login()sizin Cookie içeriğine dayalı.

Düzenleme: @Staale - Hep kullanmak locals()hile tüm şablonları görebilmesi benim bağlam için requestve bu yüzden request.user. Sonra değilsen o kadar basit olmaz sanırım.

Cevap 03/09/2008 saat 13:28
kaynak kullanıcı

oy
18

Kendi yazma bakmak istiyorum gibi açıkça her görünümde değişkenlerini ayarlamak zorunda değil daha genel anlamda, bu sesler bağlam işlemci .

Dokümanlar:

Bu bir argüman, bir HttpRequest nesnesi alır sadece bir Python fonksiyonu, ve şablon bağlamına ekleniyor bir sözlük döndürür: Bir bağlam işlemci çok basit bir arayüze sahiptir. Her bağlam işlemci bir sözlük dönmelidir.

Cevap 03/09/2008 saat 13:31
kaynak kullanıcı

oy
2

Benim şablonları `user`.`username` kullanmak için @Dave, o zaman sadece normal harita / karma yerine RequestContext kullanmak zorunda kalacak: http://www.djangoproject.com/documentation/templates_python/#subclassing-context- RequestContext

Bu yüzden motor şablonu çekleri hiçbir globaller vardır sanırım.

Ama RequestContext benim sorunlarını çözmek için içine bakmak bazı önceden doldurmak sınıfları vardır. Teşekkürler.

Cevap 03/09/2008 saat 13:33
kaynak kullanıcı

oy
33

@Ryan: önişlemciler hakkında Belgeler biraz küçük olduğunu

@Staale: Bağlam bir görünümde şablon aradığını her kullanıcı ekleniyor, KURU

Çözüm bir önişlemci kullanmaktır

A : senin ayarlarında eklemek

TEMPLATE_CONTEXT_PROCESSORS = (
    'myapp.processor_file_name.user',
)

B : Uygulamam olarak / processor_file_name.py sokma

def user(request):
    if hasattr(request, 'user'):
        return {'user':request.user }
    return {}

Şu andan itibaren size şablonları kullanıcı nesne işlevleri kullanmak mümkün olacaktır.

` user`.`get_full_name `
Cevap 06/11/2008 saat 17:05
kaynak kullanıcı

oy
43

Orada gerek zaten varsa kullanıcı nesnesi için bir bağlam işlemci yazmak için "django.core.context_processors.auth"in ve kullandığınız takdirde sizin görünümlerinde.TEMPLATE_CONTEXT_PROCESSORS RequestContext

Eğer django 1.4 veya en son modülünü kullanıyorsanız taşındı django.contrib.auth.context_processors.auth

Cevap 30/06/2009 saat 17:14
kaynak kullanıcı

oy
1

onun olası varsayılan olarak, aşağıdaki adımları yaparak, bunu ayarlarınızdan bağlam 'django.contrib.auth.context_processors.auth' eklemiş olun. Varsayılan olarak onun böyle görünümüne yüzden, settings.py eklenen

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

Ve sen, bu gibi kullanıcı nesnesi erişebilir

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

Daha fazla bilgi için buraya bakınız http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-data-in-templates

Cevap 27/01/2011 saat 12:15
kaynak kullanıcı

oy
3

ipuçları başlayanlar için, "sıfırdan" dan, bir kez daha her cevap vardır ama:

Kimlik doğrulama verileri varsayılan olarak şablonları (neredeyse) içinde - bir küçük hile ile:

içinde views.py:

from django.template import RequestContext
...
def index(request):
    return render_to_response('index.html', 
                              {'var': 'value'},
                              context_instance=RequestContext(request))

içinde index.html:

...
Hi, ` user`.`username `
var: ` value `
... 

Buradan: https://docs.djangoproject.com/en/1.4/topics/auth/#authentication-data-in-templates

Bir bu şablon bağlam değişken kullanılamaz RequestContext kullanılmıyor.

Cevap 09/08/2012 saat 08:28
kaynak kullanıcı

oy
0

Kullanım context_processors. https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-TEMPLATES-OPTIONS

settings.py

'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'myapp.functions.test'
        ],
},

myapp / functions.py

def test(request):
    return {'misc': 'misc'}
Cevap 03/11/2019 saat 22:10
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more