Lumberyard
Guía del usuario (Version 1.21)

Plantillas de generación de código

La versión publicada de AZ Code Generator es preliminar y está sujeta a cambios.

El generador de código AZ utiliza el motor de plantilla Jinja2 para que Python represente su salida. El motor de plantilla Jinja saca texto sin formato con instrucciones de lógica y variables integradas.

Las plantillas Jinja están diseñadas para ser muy legibles e imitar la estructura general de la salida deseada. Se procesan de arriba a abajo. Cualquier texto fuera del bloque de control de la plantilla se envía directamente a la salida.

A continuación se muestran algunas plantillas de ejemplo. Para obtener más información sobre la creación de plantillas Jinja, consulte la Documentación de diseño de plantilla Jinja.

Ejemplo sencillo

Una plantilla Jinja puede utilizar variables de texto para reemplazar texto en ubicaciones predeterminadas en la salida, como en el siguiente ejemplo:

// Here's a {{ variable_name }} !! int {{ variable_name }} = {{ variable_value }};

En este ejemplo, la plantilla Jinja recibe la siguiente entrada.

{ 'variable_name' = 'foo', 'variable_value' = 42 }

Los siguientes resultados de salida.

// Here's a foo !! int foo = 42;

Ejemplo complejo

Jinja permite estructuras de control bastantes complicadas de lógica, ramificación y bucle. La siguiente plantilla de ejemplo genera una clase que tiene las variables públicas y privadas especificadas por la entrada:

// This class is auto-generated! class {{ class.name }} { public: virtual ~{{ class.name }}() = default; {% if class.members is defined %} {% for member_var in class.members if member_var.visibility is 'public' -%} {{ member_var.type }} m_{{ member_var.name }}{{ if member_var.value is defined }} = {{ member_var.value }}{{ endif }}; {%- endfor %} {% endif %} private: {% if class.members is defined %} {% for member_var in class.members if member_var.visibility is 'private' -%} {{ member_var.type }} m_{{ member_var.name }}{{ if member_var.value is defined }} = {{ member_var.value }}{{ endif }}; {%- endfor %} {% endif %} };

En este ejemplo, la plantilla Jinja recibe la siguiente entrada.

{ 'class' : { 'name' : 'MyClass', 'members' : [ { 'name' : 'foo', 'type' : 'int', 'visibility' : 'public' }, { 'name' : 'bar', 'type' : 'long', 'visibility' : 'public', }, { 'name' : 'secretSauce', 'type' : 'float', 'visibility' : 'private', 'value' : '98.6f' } ] } }

La plantilla produce la siguiente salida.

// This class is auto-generated! class MyClass { public: virtual ~MyClass() = default; int m_foo; long m_bar; private: float m_secretSauce = 98.6f; };

Datos de plantilla

Los datos que están disponibles para la plantilla están totalmente controlados por el controlador de plantilla de Python.

En la siguiente tabla se muestran las variables que se añaden automáticamente al entorno Jinja.

Variable Descripción
extra_data Objeto Python que contiene datos devueltos por el método apply_transformations del controlador de la plantilla.
extra_str Cadena que contiene el contenido de extra_data en formato JSON.
json_object Objeto Python que contiene el JSON intermedio descodificado después de haber sido procesado por el controlador de la plantilla.
json_str Cadena que contiene el JSON intermedio codificado después de haber sido procesado por el controlador de la plantilla.

Para obtener más información acerca de la salida intermedia, consulte Formato de datos JSON intermedio.

nota

Como Jinja contiene un conjunto de características limitado, intentar realizar transformaciones de datos complejos en plantillas Jinja produce plantillas demasiado complicadas y, generalmente, ilegibles. Por este motivo, le recomendamos que realice cualquier manipulación de datos importante en el controlador de plantillas antes de que pase al motor de plantillas de Jinja. Para obtener más información, consulte Controladores de plantilla.