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>