Estoy tratando de escribir un conjunto de etiquetas de plantilla que le permiten especificar fácilmente los archivos js y css dentro de los archivos de la plantilla. Algo similar a {% requires global.css %}
y más adelante en la solicitud, {% get_required_css %}
.Django templatetag "orden de procesamiento"
Tengo esto funcionando principalmente, pero hay un par de problemas. Comenzaremos con los problemas de 'timing'.
Cada etiqueta de plantilla se compone de dos pasos, call/init y render. Cada llamada/init ocurre antes de que se invoque cualquier procedimiento de renderizado. Para garantizar que todos los archivos estén en cola antes de que se muestre el {% get_required_css %}
, necesito compilar mi lista de archivos necesarios en los procedimientos call/init.
Por lo tanto, necesito recopilar todos los archivos en un paquete por solicitud. El dict context
obviamente es el lugar para esto, pero desafortunadamente, el call/init no tiene acceso a la variable de contexto.
¿Esto tiene sentido? ¿Alguien ve una forma de evitar esto (sin recurrir a un objeto global hack-y request
)?
Otra posibilidad de almacenar estos en un dict local, pero aún deberían estar vinculados a la solicitud de alguna manera ... posiblemente algún tipo de etiqueta {% start_requires %}
? Pero no tengo ni idea de cómo hacer ese trabajo tampoco.
Después de revisar brevemente las capacidades de 'middleware', estoy considerando usar eso para insertar el html generado. El problema con eso es que es más difícil conseguir que cualquiera de las diversas aplicaciones de compresión estática funcione sin problemas. –
Si alguien está interesado, tengo una aplicación en github que es una solución bastante poco elegante para este problema específico: http://github.com/pappy74/django-requires_js_css. Es un poco similar a la respuesta de Jack a continuación, pero empaquetada como una aplicación bonita y ordenada. –