2010-05-23 14 views
58

Bazı değişkenlerimi tüm görünümlerime iletmem gereken bir noktaya geldim (çoğunlukla özel kimlik doğrulama türü değişkenleri).django içinde kendi içerik işlemcimi oluşturma

Kendi içerik işlemcimin bunu yapmanın en iyi yolu olduğunu yazmam söylendi, ancak bazı sorunlar yaşıyorum. Gördüğünüz gibi

Benim ayarlar dosyası ben 'context_processors' adlı bir modül ve 'say_hello' denilen içinde bir işlevi var, bu

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.contrib.messages.context_processors.messages", 
    "sandbox.context_processors.say_hello", 
) 

benziyor.

Birazdan ben şimdi görünümler içinde aşağıdakileri yapabilirsiniz varsaymak muyum

def say_hello(request): 
     return { 
      'say_hello':"Hello", 
     } 

benziyor hangisi?

{{ say_hello }} 

Şu anda, bu benim şablonunda hiçbir şey kılar.

Bence yazdığınız bağlam işlemci çalışması gerekir

from django.shortcuts import render_to_response 

def test(request): 
     return render_to_response("test.html") 

cevap

41

benziyor. Sorun senin bakış açınız.

Görüşünüzü RequestContext ile oluşturuluyor musunuz? Örneğin

:

def test_view(request): 
    return render_to_response('template.html') 

görünümü, yukarıdaki TEMPLATE_CONTEXT_PROCESSORS listelenen içerik işlemcileri kullanmaz.

def test_view(request): 
    return render_to_response('template.html', context_instance=RequestContext(request)) 
+1

'context_instance' eksik olan şeydir! Teşekkürler TM – dotty

+0

Takip et, nasıl bu context_instance'a ihtiyacım var? Django'nun auth sistemini kullanırsam buna nasıl ihtiyacım yok? – dotty

+0

Django'nun yerleşik görünümleri bunu sizin için halleder ('RequestContext' kullanırlar). Yaptığınız içerik işlemcisini düşünün. Bir argüman olarak 'istek' alır. Bu, bir şekilde geçerli isteği oluşturma mantığına vermeniz gerektiği anlamına gelir. 'RequestContext' temel olarak sadece tüm bağlamsal işlemciler arasında döngü döngüsünü basitleştirir ve mevcut talebi onlara aktarır, ardından sayfa içeriğini sonuçlar ile günceller. –

24

Eğer context_instance argümanı ile yerine render_to_response bir kısayol olarak render kullanabilirsiniz django docs göre: Alternatif

olduğu render() kısayolu kullanmak emin olun RequestContext şöyle bir vermekteyiz bir RequestContext kullanımını zorlayan context_instance bağımsız değişkeniyle render_to_response() öğesine yapılan çağrıyla aynıdır. Eğer bir sözlüğün içeriği ile bir şablon doldurmak için Django render_to_response() kısayol kullanıyorsanız

+0

Gerçekten de, bu günler mümkün. – fabspro

2

, sizin şablon varsayılan olarak bir Bağlam örneği (bir RequestContext) geçirilir. Şablon oluşturmanızda RequestContext kullanmak için, render_to_response() numaralı render() kısayolunu kullanarak, RequestContext kullanımını zorlayan context_instance bağımsız değişkeni kullanın.

İlgili konular