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

Python Jinja模板是否有惯用的文件扩展名?,python,templates,file-extension,jinja2,Python,Templates,File Extension,Jinja2,我需要通过编程区分Jinja模板文件、其他模板文件(如ERB)和无模板纯文本文件 根据: Jinja模板不需要特定的扩展名:.html、.xml或任何其他扩展名都可以 但是当需要显式扩展时,我应该使用什么呢.py具有误导性,包括“jinja”和“extension”等词在内的任何搜索都会受到周围讨论的严重影响 我可以很容易地规定一个项目范围的约定(.jnj或.ja请记住),但这是针对开源的,所以如果已经有现成的实践,我不想逆潮流而行 编辑1:同样,我知道Jinja项目故意没有定义默认的文件扩展

我需要通过编程区分Jinja模板文件、其他模板文件(如ERB)和无模板纯文本文件

根据:

Jinja模板不需要特定的扩展名:.html、.xml或任何其他扩展名都可以

但是当需要显式扩展时,我应该使用什么呢
.py
具有误导性,包括“jinja”和“extension”等词在内的任何搜索都会受到周围讨论的严重影响

我可以很容易地规定一个项目范围的约定(
.jnj
.ja
请记住),但这是针对开源的,所以如果已经有现成的实践,我不想逆潮流而行


编辑1:同样,我知道Jinja项目故意没有定义默认的文件扩展名。我想问的是,是否有任何非官方的惯例出现在出于特定项目原因而需要的情况下



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

2021更新::Jinja现在正式建议使用扩展名
。Jinja
。检查


更新: 自从我写了这个答案后,情况发生了变化,
.jinja2
.j2
正在发展


Jinja作者没有定义默认扩展。大多数Jinja模板编辑器(如、、和)没有提到强制Jinja高亮显示的默认扩展

Django已经开始考虑设置一个默认扩展名,并以wontfix问题结束。我引述闭幕词:

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


我建议您应该使用自己的,因为没有通用的扩展名。

我使用.jnj扩展名-对于语法突出显示和vim中的代码段,我刚刚复制、重命名并调整了设置

当我需要在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:call-ToggleFileType()绑定到F12键

Ansible使用
.j2
扩展名

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

如果您在以下页面中查找
.j2
,您将看到许多情况:


这也是我在其他项目中使用的惯例,django模板除外。

仅供参考-上面提到的Ansible使用
.j2
作为模板文件的惯例是正确的,只是指出了他们记录的“最佳实践”,其中提到:

模板以
.j2


我使用
.html.jinja2
.js.jinja2
.css.jinja2
等来表示(a)它是一个jinja2模板,以及(b)将编译成html、js或css文件。我喜欢Ansible中的
.j2
选项,但我使用
.jinja2
可以让新的贡献者更容易猜测正在使用的模板语言

对于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

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


我想在2020年增加一个额外的答案,因为最近金贾2号项目决定从名称中删除“2”。。。意思是现在只是“金贾”


Ansible仍然在很多文档中使用
.j2
,但正如官方的Jinja模板引擎文档现在推荐的那样
.Jinja
如果您想使用非Jinja特定的文件扩展名(请参阅或),我想人们会开始这样做(并停止使用
.j2
.jinja2
)。

你说得对,我知道他们没有定义默认值(这个决定是经过深思熟虑做出的),但我的项目需要明确的扩展-我在问是否有任何非官方约定已经出现(在随意选择之前)。据我所知,有一个。就我个人而言,我使用的是
html
。如果它有一个通用的扩展,开发人员会倾向于在编辑器中实现它,因为大多数编辑器都是由社区开发的。我不从事web项目。即使我是,
html
,也不适合再次使用,它不区分HTML与Jinja一起归档,一个没有(这是我需要做的).I使用
.jinja2
,哈哈。在HTML上下文中搜索时发现此问题的其他人的旁注:需要注意的一点是,文件扩展名对HTML自动转义有影响。如果您正在加载宏以便在HTML模板中使用,
{%import“whatever.HTML”作为foo%}当
{%import“whatever.jinja”作为foo%}
将导致像
这样的自动转义成为
。我怀疑这就是为什么许多Django和Flask用户最终使用
.html
@mirth23的部分原因。你能详细说明一下吗?我很适合我。html表单宏作为工作html添加到模板中,尽管我使用
.html.j2
作为t的扩展hem all.Sublime Text用户可能有兴趣了解它识别.j2扩展名,并且可以检测到*.html.j2是一个html jinja模板。非常酷。我使用的另一种方法与template.j2.html类似。因此,它可以由任何编辑器突出显示语法,但仍然将其标记为模板。我没有看到“jinja 2模板”或者我的文件类型列表中的*.jinja2。我是runni