web-dev-qa-db-fra.com

Existe-t-il une extension de fichier idiomatique pour les modèles Jinja?

Je dois faire une distinction par programme entre les fichiers de modèle Jinja, les autres fichiers de modèle (tels que ERB) et les fichiers de texte brut sans modèle.

Selon documentation Jinja :

Un modèle Jinja n'a pas besoin d'avoir une extension spécifique: .html, .xml ou toute autre extension est très bien.

Mais que dois-je utiliser lorsqu'une extension explicite est requise? .py est trompeur, et toute recherche incluant les mots "jinja" et "extension" est mal nettoyée par la discussion autour de Jinja Extensions .

Je pourrais facilement dicter une convention à l'échelle du projet (.jnj ou .ja viennent à l'esprit) mais c'est pour l'open source donc je ne veux pas inverser la tendance s'il y a déjà une pratique établie quelque part.


EDIT 1: Encore une fois, je comprends que le projet Jinja - à dessein - ne définit pas d'extension de fichier par défaut. Je demande s'il y a des conventions non officielles qui ont émergé pour des circonstances où l'on est souhaité pour une raison spécifique au projet.


EDIT 2: Clarification: Ce n'est pas pour le contenu HTML.

48
Chris Tonkinson

Les auteurs de Jinja n'ont pas défini d'extension par défaut. La plupart des éditeurs de modèles Jinja comme extension Vim , extension TextMate , extension Emacs et PyCharm ne mentionnent aucune extension par défaut pour appliquer la mise en évidence de Jinja.

Django avait déjà n débat similaire sur la définition d'une extension par défaut, et s'est terminé comme un problème wontfix . Je cite le message de clôture:

La détection de type de fichier basée sur l'extension est défectueuse pour les raisons décrites dans ces commentaires, vous devez donc effectuer une inspection interne, tout comme la détection de type MIME fonctionne.

Je vous suggère d'utiliser le vôtre car il n'y en a pas de commun.

12
BigOther

Ansible utilise le .j2 extension.

Je n'ai pas pu trouver de documentation définitive sur ce point précis mais nous voyons des occurrences de .j2 extension à plusieurs endroits de leur documentation:

Si vous recherchez .j2 dans les pages suivantes, vous verrez de nombreux événements:

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

C'est la convention que j'utilise également pour d'autres projets, à l'exception des modèles Django.

32
Johnride

Juste pour info - Johnride mentionné ci-dessus à propos d'Ansible utilisant .j2 comme leur convention pour le fichier modèle qui est correct, soulignant simplement les "meilleures pratiques" documentées ont maintenant mis , qui mentionne:

les modèles se terminent par .j2

9
rd2

PyCharm d'IntelliJ utilise .jinja2 comme modèle de reconnaissance des modèles Jinja2. Pour cette raison, j'utilise le même (et je recommande aux autres de le faire aussi)

enter image description here

6
Miguel

J'utilise .html.jinja2, .js.jinja2, .css.jinja2 etc pour indiquer que (a) il s'agit d'un modèle Jinja2 et (b) sera compilé dans un fichier HTML, JS ou CSS. J'aime le .j2 choix dans Ansible, mais IMO utilisant .jinja2 permet à un nouveau contributeur de deviner plus facilement quel langage de template est utilisé.

Pour les utilisateurs de Flask, car l'échappement automatique est bien d'avoir:

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
4
Kiran Jonnalagadda

J'utilise l'extension .jnj - et pour la mise en évidence de la syntaxe et pour les extraits dans vim, je viens de copier, renommer et modifier les paramètres pour twig .

Lorsque j'ai besoin de certains paramètres html (comme les commentaires, l'équilibrage des balises, l'indentation, etc.) dans le modèle jinja, j'ai également une fonction définie il y a un certain temps pour fonctionner avec PHP et WordPress - il bascule en html et revient au type de fichier précédent:

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

Et il est lié à la touche F12 avec nmap <silent> <F12> :call ToggleFileType()<CR>

2
elemel21