Django: archivos estáticos, templates y Formularios
¿Qué son los archivos estáticos?
Los archivos .js, .css, imágenes son denominados en Django archivos estáticos.
¿Qué son las plantillas (templates)?
Django soporta dos motores de plantillas (via backend y jinja2) estos motores definen una API que se encarga de cargar y representar nuestros plantillas.
Para que django sepa cómo encontrar las plantillas tenemos que especificar el path en la clave dirs de la variable templates.
¿Cómo recibe el servidor los datos?
En la etiqueta form el atributo action contiene una url. Esta url tiene asociada una vista y es esta vista la encargada de procesar la petición y retornar datos, plantillas etc.
IMPORTANTE: Este ejemplo y todos los que muestre en el blog utilizaré la versión 3.1 de Django.
Proyecto Django
Vamos a crear una calculadora para entender todo lo explicado.
Pasos a seguir:
- Crear el proyecto.
- crear las carpetas templates y staticfiles(en esta carpeta crearemos 2 subcarpetas: js y css).
- Construir los paths en el archivo config.
- Crear el archivo calculadora.html con los tags templates.
- Creamos el archivo forms.js para procesar la solicitud y el archivo calculadora para dar un poquito de estilos a nuestra calculadora.
- Creamos el archivo views.py luego creamos la vista que se va a encargar de procesar la solicitud y la vista que va a mostrar el html.
- Vinculamos las vistas con una url.
#1- Ejecutamos el comando django-admin startproject calculadora
Y el resultado es el siguiente
img 1 - Estructura del proyecto calculadora. |
#2 - Creamos las capetas staticfiles y templates dentro de calculadora
img 2- Creación de las carpetas staticfiles, js, css y templates |
#3 -Construimos el path de las carpetas para después poder construir las rutas relativas
img 3- Definimos la ruta para las plantillas. |
Construcción dinámica del path.
os.path.dirname(__file__) esto lo que hace es __file__ obtiene el path de donde esta el archivo config. La función dirname devuelve el path de __file__ pero sin los caracteres config.py.
Unimos ese directorio con nuestra carpeta template y después reemplazamos los slash \ por /.
El path que daría en mi caso "F:/blog/calculadora/calculadora/templates/". Con eso ya podemos llamar a nuestras plantillas.
img 4- Construcción de la ruta para los archivos estáticos. |
Para los archivos js y css colocamos la variable STATICFILES_DIRS. Esta contiene una lista con los paths de archivos estáticos que no están dentro de una aplicación.
NOTA: STATIC_URL = "/static/" es la carpeta donde residen los archivos estáticos en las aplicaciones.
img 5- Template calculadora con sus archivos estáticos. |
La plantilla tiene un formulario que hace una petición get a la url /resultado/. Además contiene una estructura if-else.
Si el usuario ingresa valores validos, la variable resultado será True he imprimirá un menaje.
Si el usuario no ingresa nada y hace el submit, la vista retorna resultado = "" esto es False por lo que ira por el else.
Los archivos estáticos lo agregamos con la plantilla {% load static %} esto le dice a django que debe buscar archivos estáticos en todos los directorios especificados. En nuestro caso es la lista de directorios declarados en STATICFILES_DIRS.
El tag "{static 'js/forms.js'}" construye el path relativo uniendo lo que cargo en load con la cadena que se le esta pasando. Lo mismo es para el css.
img 6- Contenido de los archivos js y css. |
En el archivo forms.js, tomamos los valores de los inputs y la elección del select, los codificamos en json y lo enviamos a la url la cual tiene la vista que va a procesar la solicitud.
#6 - Creamos el archivo views.py.NOTA: Este archivo no se crea al crear el proyecto.img 7 - Las vistas que renderiza el formulario y los datos. |
Tenemos 2 vistas:
- Una que renderiza nuestra plantilla.
- La otra es la encargada de procesar la solicitud GET.
La función render lo que hace es toma solicitud y renderizar una plantilla con las variables de contextos. Estas variables no son más que un diccionario. Si los datos ingresados son válidos empieza a evaluar que operación debe realizar (La operación viene en la variable operation). Una vez que entra en alguna condicional, realiza la operación convierte el resultado en un string y renderiza la variable y la plantilla.
#7-Vinculamos las vistas con las urls.
img 8- Vinculo entre las vistas y las urls. |
Vinculamos las urls con las vistas.
Para ver la plantilla, colocamos en el navegador 127.0.0.1:8000/calc/
img 11- Resultado de dividir 30/2. |
img 12 - Resultado de multiplicar 5 * 5. |
- Especificamos la ruta/s en la clave dirs que está en la variable TEMPLATES.
- Para cargar archivos estáticos que no están en una aplicación usamos la variable STATICFILES_DIRS el cual contiene una lista de directorios donde debe buscar el servidor archivos estáticos.
- Para construir la ruta relativa utilizamos los tags {%load %} y {% static%}.
- El valor del action de los formularios siempre apuntan a una url.
- Las urls están asociadas a una vista. Esta es la encargada de devolver una respuesta.
- El objeto request tiene diccionarios GET y POST. De esos diccionarios podemos recuperar los datos enviados por el cliente. Todas las vistas deben tener este objeto como primer argumento (A menos que estés trabajando con clases, en ese caso self seria el primer argumento).
¡Saludos pro.grammerjrs del mundo!
Comentarios
Publicar un comentario