# Como contribuir al sitio. El sitio esta construido bajo la concepcion de que prácticamente cualquier framework iba a introducir más complejidad de lo que le iba a aportar al desarrollo del mismo. Nuestro framework es `sitegen.py`, su función principal es construir el sitio usando [jinja2](https://www.fullstackpython.com/jinja2.html) como motor de plantillas. Además `sitegen.py`, cuando se corre en modo `watch` actualiza en tiempo real los cambios que se hacen en el sitio. ## Estructura - build/ Cuando se construye el sitio, todos los ficheros y carpetas están aquí. - languages/ Un diccionario que contiene todas las traducciones del sitio. - layout/ Contiene todos los html que conforman el sitio y el esqueleto de lo que se va a generar. Ver mas en #layout. - plugins/ Funciones que extienden nuestro framework. (No es muy relevante) - root/ Archivos que se van a copiar en la raíz del sitio estático para ser servidos. Cuando se genera el sitio estático, todos los ficheros en esta dirección se copian verbatim para carpeta build/ - static/ Similar a `root` (no recuerdo porque tenemos diferenciado root de static). Todo lo que esta en este directorio se copia verbatim para la carpeta build/ - .gitignore - deploy.sh Function para - run_server.sh Construir el sitio en modo watch, para hacer ver los cambios en tiempo real. - sitegen.py El framework hecho en python ## Requerimientos - python3 (Disponible en el PATH) - jinja2 (Dependencia de python) ## Layout La carpeta `layout` contiene todas las paginas del sitio. Para los ficheros que comienzan por underscore (`_`) no se generan páginas en el sitio. (Por ejemplo para `_base.html` y `_work_no_all.html`). Las plantillas se generan usando [jinja2](https://www.fullstackpython.com/jinja2.html), un motor de plantillas por defecto en python. Es el motor de plantillas usado en django. ### Aprender jinja en 5 minutos - **Extend:** Usando extend, se "hereda" de otro fichero, lo que significa que se copia el contenido del otro fichero en este. Por ejemplo: `{% extends "_base.html"%}` - **Block:** Crea un bloque que se puede sobre escribir cuando una plantilla depende de otra. Por ejemplo, en el fichero `_base.html` esta el siguiente fragmento: ``` ...
{% block main %} {% endblock %}
... ``` Eso quiere decir que cualquier plantilla que extienda a `_base.html` (que son todas) pueden determina el contenido que se genera dentro del tag `
` Por ejemplo: ver en `about-and-contact.html` como todo el contenido se encuentra dentro del bloque: ``` {% block main %} ... {% endblock %} ``` Nota: Hay mas funcionalidades de jinja que se usan, pero no creo que sean muy relevantes por ahora. Todos los cambios que se deban aplicar al sitio entero (como el banner o cosas así) se deben hacer directamente en el fichero `_base.html`. Cuando son cambios particulares de alguna vista (como el tamaño de los carteles, o cantidad de columnas) se debe modificar la vista en particular. Ver por ejemplo `illustration.html`. Nota como se añade un elemento de `