2016-03-18 22 views
3

Web sayfasında çalışıyorum. E-posta veya telefon gibi footer numaralı telefondan iletişim sağlanacaktır. Bu footer her yerde olmalıdır, bu nedenle her bir template/html tarafından genişletilen base.html içinde olur.Veritabanından değişken nasıl base.html şablonuna geçirilir?

Yöneticisinin iletişim bilgilerini değiştirmesi için basit ve kolay bir arabirim sağlamak üzere ContactAdmin adlı bir tablo oluşturdum. Ve işte problem. base.html

hiçbir görünümü vardır (sadece uzanan içindir) böylece orada değişkeni koymak nasıl bilmiyorum - tablodan ContactAdmin dan email, telephone. Düşüncemde büyük bir overkill olan her görünüme koymayı düşündüm.

Django bu değişkenleri veritabanından okumak ve base.html içine koymak nasıl yapılır?

ContactAdmin tablo sadece bir satır tüm görünümlerini düzenlemek gerek yok

cevap

2

Bu amaçla bağlam işlemcileri kullanabilirsiniz. Örneğin:

YourApp/context_processors.py

def contact(request): 
    from yourapp.models import ContactAdmin 
    contacts = ContactAdmin.objects.all() 

    return { 
     'contacts': contact, # Add 'contacts' to the context 
    } 

Projeniz/settings.py

TEMPLATES = [ 
    { 
     ... 
     'OPTIONS': { 
      'context_processors': [ 
       ... 
       'yourapp.context_processors.contact', 
      ] 
     } 
    } 
] 

Bunları Kişi ayarlarını, sık sık değiştirilmesi gidiş değildir sanırım. Yani caching sorgusuyla da ilgilenebilirsiniz.

4

olmalıdır. Tam olarak bu senaryo için django'nun template context processors vardır. Buradaki avantaj, taban şablonu hala şablonlama dilinin bir parçası olduğu ve Context'a erişebileceğinden, bu değişkenleri yalnızca özel içerik işlemcinize ayarlamanız ve her şeyin olduğu gibi çalışması gerekir. Özel bağlam işlemcileri yazma konusunda

Bazı örnekler:

İlgili konular