txt leer imprimir importar crear archivos archivo python templates file-extension jinja2

python - leer - ¿Hay una extensión de archivo idiomática para las plantillas de Jinja?



imprimir en un archivo python (5)

Ansible usa la extensión .j2 .

No pude encontrar una documentación definitiva sobre ese punto preciso, pero vemos .j2 extensión .j2 en muchos lugares de su documentación:

Si busca .j2 en las siguientes páginas verá muchas apariciones:

http://docs.ansible.com/ansible/template_module.html http://docs.ansible.com/ansible/playbooks_intro.html

Esta es la convención que uso también para otros proyectos, excepto las plantillas django.

Necesito distinguir de manera programática entre los archivos de plantilla Jinja, otros archivos de plantilla (como ERB) y los archivos de texto plano sin plantilla.

Según la documentación de Jinja :

Una plantilla Jinja no necesita tener una extensión específica: .html, .xml, o cualquier otra extensión está bien.

Pero, ¿qué debo usar cuando se requiere una extensión explícita? .py es engañoso, y cualquier búsqueda que incluya las palabras "jinja" y "extensión" está mal lavada por discusión en torno a las Extensiones Jinja .

Podría fácilmente dictar una convención para todo el proyecto ( .jnj o .ja vienen a mi mente) pero esto es para código abierto, así que no quiero oponerme a la tendencia si ya existe una práctica establecida en algún lugar.

EDIT 1: Una vez más, entiendo que el proyecto Jinja, a propósito, no define una extensión de archivo predeterminada. Estoy preguntando si hay alguna convención no oficial que haya surgido para circunstancias en las que se desea una por alguna razón específica del proyecto.

EDIT 2: Aclaración: Esto no es para contenido HTML.


Los autores Jinja no definieron una extensión por defecto. La mayoría de los editores de plantillas Jinja como la extensión Vim , la extensión TextMate , la extensión Emacs y PyCharm no mencionan ninguna extensión predeterminada para imponer el resaltado Jinja.

Django ya tuvo un debate similar sobre la configuración de una extensión predeterminada, y terminó como un problema de wontfix . Cito del mensaje de cierre:

La detección del tipo de archivo basada en la extensión es defectuosa por las mismas razones que se describen en estos comentarios, por lo que debe realizar una inspección interna, al igual que la detección de tipo MIME.

Le sugiero que use su propio ya que no hay uno común.


Solo para su información: Johnride mencionó anteriormente acerca de Ansible utilizando .j2 como su convención para el archivo de plantilla que es correcto, simplemente señalando las "mejores prácticas" documentadas que ahora han publicado , que menciona:

plantillas terminan en .j2


Uso .html.jinja2 , .html.jinja2 , .js.jinja2 , etc. para indicar que (a) es una plantilla Jinja2 y (b) se compilará en un archivo HTML, JS o CSS. Me gusta la opción .j2 en Ansible, pero IMO utilizando .jinja2 hace que sea más fácil para un nuevo colaborador adivinar qué lenguaje de plantillas se está utilizando.

Para los usuarios de Flask, ya que es bueno tener auto-escape:

def _select_jinja_autoescape(filename): """ Returns `True` if autoescaping should be active for the given template name. """ if filename is None: return False return filename.endswith((''.html'', ''.htm'', ''.xml'', ''.xhtml'', ''.html.jinja'', ''.html.jinja2'', ''.xml.jinja'', ''.xml.jinja2'', ''.xhtml.jinja'', ''.xhtml.jinja2'')) app.jinja_env.autoescape = _select_jinja_autoescape


Utilizo la extensión .jnj, y para el resaltado de sintaxis y para fragmentos en vim acabo de copiar, cambiar el nombre y modificar las configuraciones para la twig .

Cuando necesito algunas configuraciones para html (como comentarios, balanceo de etiquetas, sangría, etc.) en la plantilla jinja, también tengo una función configurada hace un tiempo para trabajar con PHP y WordPress - cambia a html y vuelve al tipo de archivo anterior:

let g:my_file_type = 0 function! ToggleFileType() if g:my_file_type == 0 set ft=html let g:my_file_type = 1 else filetype detect let g:my_file_type = 0 endif endfunction

Y está vinculado a la tecla F12 con nmap <silent> <F12> :call ToggleFileType()<CR>