Estamos felices de anunciar Cactus 3. Trae un conjunto de excelentes funciones nuevas, como huellas dactilares de activos, canalización de activos, bonitas URL, eventos del sistema de archivos nativo de Mac, configuración automática del servidor de nombres, soporte para múltiples backends de implementación (Google Sites) y más. Se han reescrito grandes partes del código, acompañado de un amplio conjunto de pruebas unitarias. Muchas gracias a Thomas Orozco y otros colaboradores.
Cactus es un generador de sitios web estáticos simple pero potente que utiliza Python y el sistema de plantillas Django. Cactus también facilita el desarrollo local y la implementación de su sitio directamente en S3. Funciona muy bien para blogs y sitios web de soporte, personales, de empresa y de cartera.
Para obtener una descripción general rápida, mire este breve video tutorial.
Cactus se basa en la idea de que la mayoría de las funciones dinámicas de los sitios web de hoy en día se pueden realizar utilizando Javascript, mientras que el sitio real puede permanecer estático. Los sitios web estáticos son fáciles de alojar y, por lo general, muy rápidos.
Desarrollé Cactus porque quería un sistema estándar y sencillo que los diseñadores de Sofa pudieran utilizar para crear e implementar sitios web rápidos. Entonces, los usuarios típicos serían diseñadores expertos en tecnología, que quieren usar plantillas, pero no les gusta meterse con la configuración de Django o S3.
Desde entonces, ha evolucionado bastante con un sistema de complementos que admite blogs, sprites, versiones y es extensible.
Puede encontrar más discusión sobre generadores de sitios estáticos en esta discusión de Hacker News.
También se incluye un proyecto de blog de ejemplo.
Instale Cactus con el siguiente revestimiento.
sudo easy_install cactus
Si no vio errores, ahora puede generar un nuevo proyecto.
cactus create ~/www.mysite.com
Para comenzar a editar y obtener una vista previa de su sitio, escriba lo siguiente. Luego apunte su navegador a localhost:8000 y comience a editar. Cactus reconstruirá automáticamente su proyecto y actualizará su navegador con los cambios.
cd ~/www.mysite.com
cactus serve
Una vez que esté listo para implementar su sitio en S3, puede ejecutar lo siguiente. Necesitará sus claves de acceso a Amazon. Si aún no tienes uno, lee cómo conseguirlo aquí.
cactus deploy
Listo. ¡Tu sitio web generado por Cactus y alojado en S3!
Puede crear un nuevo proyecto generando una nueva estructura de proyecto como esta. Asegúrese de que la carpeta de destino no exista todavía.
cactus create [path]
Si no vio ningún error, la ruta que señaló ahora debería verse así.
- .build Generated site (upload this to your host)
- pages Your actual site pages
- index.html
- sitemap.xml
- robots.txt
- error.html A default 404 page
- templates Holds your django templates
- base.html
- static Directory with static assets
- images
- css
- js
- plugins A list of plugins. To enable remove disabled from the name
Después de generar su sitio, puede comenzar a construir agregando páginas a los contenidos, que pueden depender de plantillas. Entonces, por ejemplo, si desea una página /articles/2010/my-article.html
crearía el archivo con directorios en su carpeta de páginas. Luego puedes editar el archivo y usar las funciones de plantilla de Django.
Cuando construya su sitio, generará una versión estática en la carpeta de compilación que podrá cargar en cualquier host. Básicamente, renderizará cada página de su carpeta de páginas, la copiará a la carpeta de compilación y le agregará todos los activos estáticos para que se convierta en un sitio web autónomo. Puedes construir tu sitio así:
cd [your-cactus-path]
cactus build
Su sitio web renderizado ahora se puede encontrar en la carpeta (oculta) [ruta]/.build. Cactus también puede ejecutar un pequeño servidor web para obtener una vista previa de su sitio y actualizarlo cuando realice algún cambio. Esto es realmente útil cuando se desarrolla para obtener comentarios visuales en vivo.
Puedes ejecutarlo así:
cactus serve
Cactus facilita la vinculación relativa a páginas y recursos estáticos dentro de su proyecto mediante el uso de las etiquetas de plantilla {% static %} y {% url %}. Por ejemplo, si está en la página /blog/2011/Jan/my-article.html
y desea vincular a /contact.html
escribiría lo siguiente:
<a href="{% url '/contact.html' %}">Contact</a>
Simplemente use la URL que usaría normalmente: no olvide la barra diagonal inicial.
Cactus usa las plantillas de Django. Deberían ser muy similares a otros sistemas de plantillas y tener algunas capacidades interesantes como la herencia. En pocas palabras: una variable se ve así {{ name }}
y una etiqueta como esta {% block title %}Welcome{% endblock %}
. Puedes leer la documentación completa en el sitio de Django.
Para habilitar un complemento para su sitio, cambie el nombre del archivo de [PLUGIN].disabled.py a [PLUGIN].py.
Cactus puede implementar su sitio web directamente en S3; todo lo que necesita son sus credenciales de Amazon y un nombre de depósito. Cactus los recuerda en un archivo de configuración llamado config.json para que las implementaciones futuras sean sencillas. La clave secreta se almacena de forma segura en Keychain o servicios similares en otros sistemas operativos.
cactus deploy
Después de la implementación, puede visitar el sitio web directamente. Cactus también se asegura de que todos sus archivos de texto estén comprimidos y agrega encabezados de almacenamiento en caché.
Para ver el ejemplo completo de cómo crear un blog sobre Cactus, consulte CactusBlog.
El complemento de blog toma el título de la publicación, el autor y la fecha de los metadatos. Por ejemplo:
title: My first post
author: Koen Bok
date: 22-07-2012
{% extends "post.html" %}
{% block body %}
{% endblock %}
Modifique config.json
para establecer una ruta de blog personalizada, un nombre de autor predeterminado o un patrón de fecha utilizado para analizar los metadatos. Los valores predeterminados son:
"blog": {
"path": "blog",
"author": "Unknown",
"date-format": "%d-%m-%Y"
}
De forma predeterminada, puede declarar variables que se incluirán encima de cada página, por ejemplo:
test_text: Lorem Ipsum
<p>{{ test_text }}</p>
Puedes declarar las variables usando YAML en su lugar. Simplemente rodee el bloque con ---
y ...
Separadores de documentos. Entonces los objetos y matrices estarán disponibles dentro de las plantillas:
---
header_text: Lorem Ipsum
custom_object:
name: Lorem
description: Ipsum
custom_array:
-
name: lorem
-
name: ipsum
...
{% for item in custom_array %}
<p>{{ header_text }}: {{ item.name }}</p>
{% endfor %}
<p>{{ custom_object.name }} | {{ custom_object.description }}</p>
La biblioteca PyYAML se utiliza para esta funcionalidad.
Cactus viene con una canalización de activos para sus archivos estáticos. Si desea utilizarlo, asegúrese de utilizar la etiqueta de plantilla {% static %} para vincular sus activos estáticos: es posible que se les cambie el nombre en el proceso.
Modifique config.json
y agregue las extensiones de las que desea tomar huellas digitales:
"fingerprint": [
"js",
"css"
],
Esto le permite habilitar el almacenamiento en caché con fechas de vencimiento largas. Cuando un archivo cambia, su nombre reflejará el cambio. Ideal para cuando usas una CDN.
Modifique config.json
y agregue las extensiones que desea optimizar:
"optimize": [
"js",
"css"
],
Por defecto, Cactus utilizará:
Consulte plugins/static_optimizes.py
en su proyecto para comprender cómo funciona. ¡Es muy fácil agregar tus propios optimizadores!
Si desea que su mapa del sitio tenga rutas absolutas, debe agregar una clave de URL del sitio a su config.json.
Puede habilitar esto agregando modificando su configuración y agregando:
"site-url": "http://yoursite.com",
Tenga en cuenta que debe hacer esto si desea que su mapa del sitio sea válido para las Herramientas para webmasters de Google.
Si no desea tener ".html" en sus URL, Cactus puede reescribirlas por usted y hacer que "/mi-página.html" parezca "/mi-página/", creando el archivo "/mi- página/index.html".
Puede habilitar esto agregando modificando su configuración y agregando:
"prettify": true
Tenga en cuenta que si va a utilizar esto, definitivamente debe configurar su "Meta canónico" en la URL que está utilizando para no perjudicar su clasificación de búsqueda:
<link rel="canonical" href="{{ CURRENT_PAGE.absolute_final_url }}" />
Para configurar una zona alojada y generar los registros de servidor de nombres correctos para su dominio, asegúrese de que su depósito sea un nombre de dominio válido y ejecute:
cactus domain:setup
Cactus regresará con un conjunto de servidores de nombres a los que luego podrá ingresar con su registrador. Para ver la lista nuevamente ejecute:
cactus domain:list
Si su dominio es "desnudo" (por ejemplo, sin www), Cactus agregará un depósito adicional que redirige la variante www de su dominio a su dominio simple (por lo tanto, www.cactus.com a cactus.com). Todo lo anterior es sólo de Amazon por ahora.
Cactus generará automáticamente un archivo robots.txt
y sitemap.xml
en función de sus páginas.
Esto ayudará a los robots a indexar sus páginas para Google y Bing, por ejemplo.
Cactus se prueba en Python 2.6, 2.7, 3.4 y 3.5. Probablemente también funcione en Python 3.3.