django - example - mw_instance=middleware(handler) typeerror: object() takes no parameters
Procesadores de contexto vs middleware en django (3)
Me parece que todo lo que un procesador de contexto puede hacer, el middleware puede hacer. Entonces, ¿cuál es el punto de procesadores de contexto? ¿Son sólo middleware-lite?
Los procesadores de contexto se utilizan para proporcionar las plantillas con datos adicionales. Middleware es para interceptar los objetos de solicitud / respuesta, y modificarlos (o desencadenar otro comportamiento) de alguna manera significativa.
Middleware actúa como un gancho en el procesamiento de solicitud / respuesta de Django a un nivel bajo y es ligero. Los enlaces están disponibles para solicitud, respuesta, vista, respuesta de plantilla y procesamiento de excepciones. Es posible que el enganche deba modificar la solicitud antes de que la vista la maneje, es posible que deba registrar información sobre la solicitud para fines de depuración, verificar una cookie para establecer el local, y así sucesivamente.
Lea más sobre Middleware .
Los procesadores de contexto simplemente modifican el contexto. El contexto es una asignación de valores clave con variables pasadas a una plantilla. Un procesador de contexto toma un objeto de solicitud como su argumento y devuelve un diccionario de elementos que se fusionan en el contexto. El contexto se representa en su plantilla según su vista y adjunta cualquier otra cosa en la que se combinen los procesadores de contexto. Puede considerarla como una variable de contexto global, disponible para usted en todas sus plantillas.
Lea más sobre los procesadores de contexto .
Ambos son bastante simples de escribir y tienen su propósito. Aquí hay un diagrama que muestra dónde se integran el middleware y el contexto en un flujo típico de django:
Django Flowchart
El usuario solicita una página
La solicitud llega a la Solicitud de Middlewares, que podría manipular o responder a la solicitud
El URLC muestra la vista relacionada usando urls.py
Ver Middlewares se llama, lo que podría manipular o responder a la solicitud
La función de vista es invocada.
La vista podría acceder opcionalmente a los datos a través de modelos.
Todas las interacciones de modelo a DB se realizan a través de un administrador
Las vistas pueden usar un contexto especial si es necesario
El contexto se pasa a la plantilla para renderizar.
Trabajan en diferentes niveles de pila para diferentes contextos. Por lo general, es difícil mantener las pilas de un marco para que sea absolutamente ortodoxo, especialmente lo único que un marco web como el procesamiento Django es la solicitud y la respuesta. Sí, podríamos usar request.user, en lugar de context.user por context_processor al procesar la plantilla. Pero es posible que no desee que los atributos que solo se utilizan en la plantilla se configuren en cada solicitud.
Además, el decorador es flexible que el middleware para la operación a nivel de vista, pero es difícil decir que el middleware es un decorador-lite. Me gustaría tratar a los procesadores de contexto como etiquetas de plantillas de asignación pero cargadas automáticamente, por cierto.