Jinja模板是否有惯用的文件扩展名?

时间:2015-04-12 15:08:59

标签: python templates file-extension jinja2

我需要以编程方式区分Jinja模板文件,其他模板文件(例如ERB)和无模板纯文本文件。

根据Jinja documentation

  

Jinja模板不需要具有特定的扩展名:.html,.xml或任何其他扩展名就可以了。

但是当需要显式扩展时我应该使用什么? .py具有误导性,包括“jinja”和“extension”在内的任何搜索都被围绕Jinja Extensions的讨论进行了严格的搜索。

我可以轻松地指定一个项目范围的约定(.jnj.ja浮现在脑海中)但是这是开源的,所以如果已经在某处已经建立了实践,我不想逆势而行


编辑1:同样,我理解Jinja项目 - 故意 - 没有定义默认文件扩展名。我问的是,是否有任何非正式的约定出现在因某些项目特定原因而需要的情况下。


编辑2:澄清:这不适用于HTML内容。

7 个答案:

答案 0 :(得分:28)

Ansible使用.j2扩展名。

我找不到关于这个精确点的明确文档,但我们在文档的许多地方都看到了.j2扩展名的出现:

如果您在以下页面中查找.j2,您会看到很多次出现:

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

除了django模板之外,这也是我用于其他项目的约定。

答案 1 :(得分:10)

Jinja作者没有定义默认扩展名。大多数Jinja模板编辑器(如Vim extensionTextMate extensionEmacs extensionPyCharm都没有提及默认扩展名来强制执行Jinja突出显示。

Django已经a similar debate关于设置默认扩展名,并以 wontfix 问题结束。我引用结束语:

  

基于扩展的文件类型检测由于这些注释中描述的原因而存在缺陷,因此您必须进行一些内部检查,就像MIME类型检测一样。

我建议您使用自己的,因为没有共同点。

答案 2 :(得分:9)

我想在2020年增加一个答案,因为Jinja2项目最近决定将名称中的'2'删除……这意味着它现在只是“ Jinja”。

Ansible在许多文档中仍然使用.j2,但是如果您想使用非特定于Jinja的文件扩展名之外的其他内容,请参阅官方的Jinja模板引擎文档,现在推荐.jinjadocs herewhen the change was added),我认为人们将开始采取这种方式(并放弃使用.j2.jinja2)。

答案 3 :(得分:8)

仅供参考 - 上面提到的Johnride使用.j2作为模板文件的约定来提及Ansible是正确的,只是指出了他们have now put out记录的“最佳实践”,其中提到:

  

模板以.j2

结尾

答案 4 :(得分:3)

我使用.html.jinja2.js.jinja2.css.jinja2等表示(a)它是Jinja2模板,(b)将编译成HTML,JS或CSS文件。我喜欢Ansible中的.j2选项,但使用.jinja2的IMO让新贡献者更容易猜出正在使用的模板语言。

对于Flask用户,因为自动转义很不错:

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

答案 5 :(得分:2)

我使用.jnj扩展名 - 对于语法高亮显示和vim中的代码段,我只是复制,重命名和调整了twig的设置。

当我在jinja模板中需要一些html设置(如评论,标记平衡,缩进等)时,我还有一个功能设置,不久前使用PHP和WordPress - 它切换到html并返回到以前的文件类型:

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

它与nmap <silent> <F12> :call ToggleFileType()<CR>

绑定到F12键

答案 6 :(得分:2)

IntelliJ的PyCharm使用.jinja2作为识别Jinja2模板的模式。因此,我使用相同的字体(并建议其他人也这样做)

enter image description here