2011-05-12 9 views
10

esta mi código de middleware:cómo insertar un texto en todo el contexto Django Django usando el middleware

from django.conf import settings 
from django.template import RequestContext 

class BeforeFilter(object): 
    def process_request(self, request): 
     settings.my_var = 'Hello World' 
     request.ss = 'ssssssssss' 
     return None 
    def process_response(self, request, response): 

     return response 

este es el settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request', 
) 
MIDDLEWARE_CLASSES = (
    ... 
    'middleware.BeforeFilter', 
) 

y la vista es:

#coding:utf-8 

from django.conf import settings 
from django.shortcuts import render_to_response 

from django.http import HttpResponse 
from django.template import RequestContext 


def index(request): 
    context = RequestContext(request) 
    context['a'] = 'aaaa' 
    return render_to_response('a.html',context) 

el html es:

{{a}}fffff{{ss}} 

pero no muestra {{ss}}:

aaaafffff 

así ¿Cómo muestro:

aaaafffffssssssss 

cómo insertar un texto en todo el contexto Django usando middleware de Django,

por lo que no puedo utilizar para insertar el texto cada vez,

gracias

Respuesta

22

Para cumplir con su objetivo inicial, no creo que se requiera BeforeFilter middle ware. Lo que necesitamos es solo un template context processor.

Escribir un procesador contexto de la siguiente manera:

#file: context_processors.py 

def sample_context_processor(request): 
    return {'ss':'ssssssssss'} #or whatever you want to set to variable ss 

continuación, agregue el procesador de contexto a la lista de TEMPLATE_CONTEXT_PROCESSORS

#file: settings.py 

TEMPLATE_CONTEXT_PROCESSORS = (
    'myproject.context_processors.sample_context_processor', 
) 
+0

OP preguntó cómo hacerlo utilizando el middleware de Django, no procesador de contexto de la plantilla – ambi

2

Debe especificar que tiene acceso a request en la plantilla. Si lo hace solo {{ss}} la variable no existe ya que es un atributo de request (lo hizo request.ss = 'ssssssssss', ¿verdad?). Así que haz {{request.ss}} en tu plantilla y debería funcionar.

Cuestiones relacionadas