Jinja 模板是否有惯用的文件扩展名?
Is there an idiomatic file extension for Jinja templates?
我需要以编程方式区分 Jinja 模板文件、其他模板文件(例如 ERB)和无模板纯文本文件。
A Jinja template doesn’t need to have a specific extension: .html, .xml, or any other extension is just fine.
但是当需要显式扩展时我应该使用什么? .py
具有误导性,任何包含单词 "jinja" 和 "extension" 的搜索都被围绕 Jinja Extensions.
的讨论严重冲淡了
我可以很容易地指定一个项目范围的约定(想到 .jnj
或 .ja
),但这是针对开源的,所以如果已经建立,我不想逆势而行在某处练习。
编辑 1: 同样,我知道 Jinja 项目有意地没有定义默认文件扩展名。我想问的是,在出于某些特定项目原因需要的情况下,是否出现了任何非官方约定。
编辑 2: 说明:这不适用于 HTML 内容。
2021 更新::Jinja 现在正式推荐使用扩展 .jinja
。检查 docs
更新:
自从我写下这个答案后情况发生了变化,.jinja2
和 .j2
正在流行。
Jinja Authors 没有定义默认扩展。大多数像 Vim extension, TextMate extension, Emacs extension, and PyCharm 这样的 Jinja 模板编辑器都没有提到强制 Jinja 突出显示的默认扩展。
Django 已经 a similar debate 关于设置默认扩展,并以 wontfix 问题结束。我引用结束语:
Filetype detection based on extension is flawed for the very reasons described in these comments, so you have to do some internal inspection, just like MIME type detection works.
我建议你使用自己的,因为没有通用的。
我使用 .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
并且绑定到 F12 键 nmap <silent> <F12> :call ToggleFileType()<CR>
Ansible 使用 .j2
扩展。
我找不到有关该精确点的权威文档,但我们在其文档的许多地方看到了 .j2
扩展名的出现:
如果您在以下页面中查找 .j2
,您会看到很多情况:
http://docs.ansible.com/ansible/template_module.html
http://docs.ansible.com/ansible/playbooks_intro.html
这也是我在其他项目中使用的约定,除了 django 模板。
仅供参考 - Johnride 上面提到 Ansible 使用 .j2
作为模板文件的约定,这是正确的,只是指出 "best practices" 记录了他们 have now put out,其中提到:
templates end in .j2
我使用 .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
IntelliJ 的 PyCharm 使用 .jinja2
作为识别 Jinja2 模板的模式。出于这个原因,我使用相同的(并建议其他人也这样做)
我想在 2020 年添加一个额外的答案,因为最近 Jinja2 项目决定从名称中删除“2”...这意味着它现在只是 "Jinja"。
Ansible 在很多文档中仍然使用 .j2
,但如果您想使用非 Jinja 特定的文件扩展名以外的其他内容,那么官方 Jinja 模板引擎文档现在建议使用 .jinja
(参见 docs here, or when the change was added),我认为人们会开始朝这个方向发展(并放弃使用 .j2
或 .jinja2
)。
如官方网页所述,文件扩展名无关紧要,但对于语法高亮,某些 IDE 可以使用 .jinja
。
最新的 Jinja 3.0 版本也是如此。
Template File Extension As stated above, any file can be loaded as a
template, regardless of file extension. Adding a .jinja extension,
like user.html.jinja may make it easier for some IDEs or editor
plugins, but is not required. Autoescaping, introduced later, can be
applied based on file extension, so you’ll need to take the extra
suffix into account in that case.
Another good heuristic for identifying templates is that they are in a
templates folder, regardless of extension. This is a common layout for
projects.
您可以在这里查看最新版本:https://jinja.palletsprojects.com/en/3.0.x/templates/
我需要以编程方式区分 Jinja 模板文件、其他模板文件(例如 ERB)和无模板纯文本文件。
A Jinja template doesn’t need to have a specific extension: .html, .xml, or any other extension is just fine.
但是当需要显式扩展时我应该使用什么? .py
具有误导性,任何包含单词 "jinja" 和 "extension" 的搜索都被围绕 Jinja Extensions.
我可以很容易地指定一个项目范围的约定(想到 .jnj
或 .ja
),但这是针对开源的,所以如果已经建立,我不想逆势而行在某处练习。
编辑 1: 同样,我知道 Jinja 项目有意地没有定义默认文件扩展名。我想问的是,在出于某些特定项目原因需要的情况下,是否出现了任何非官方约定。
编辑 2: 说明:这不适用于 HTML 内容。
2021 更新::Jinja 现在正式推荐使用扩展 .jinja
。检查 docs
更新:
自从我写下这个答案后情况发生了变化,.jinja2
和 .j2
正在流行。
Jinja Authors 没有定义默认扩展。大多数像 Vim extension, TextMate extension, Emacs extension, and PyCharm 这样的 Jinja 模板编辑器都没有提到强制 Jinja 突出显示的默认扩展。
Django 已经 a similar debate 关于设置默认扩展,并以 wontfix 问题结束。我引用结束语:
Filetype detection based on extension is flawed for the very reasons described in these comments, so you have to do some internal inspection, just like MIME type detection works.
我建议你使用自己的,因为没有通用的。
我使用 .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
并且绑定到 F12 键 nmap <silent> <F12> :call ToggleFileType()<CR>
Ansible 使用 .j2
扩展。
我找不到有关该精确点的权威文档,但我们在其文档的许多地方看到了 .j2
扩展名的出现:
如果您在以下页面中查找 .j2
,您会看到很多情况:
http://docs.ansible.com/ansible/template_module.html http://docs.ansible.com/ansible/playbooks_intro.html
这也是我在其他项目中使用的约定,除了 django 模板。
仅供参考 - Johnride 上面提到 Ansible 使用 .j2
作为模板文件的约定,这是正确的,只是指出 "best practices" 记录了他们 have now put out,其中提到:
templates end in
.j2
我使用 .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
IntelliJ 的 PyCharm 使用 .jinja2
作为识别 Jinja2 模板的模式。出于这个原因,我使用相同的(并建议其他人也这样做)
我想在 2020 年添加一个额外的答案,因为最近 Jinja2 项目决定从名称中删除“2”...这意味着它现在只是 "Jinja"。
Ansible 在很多文档中仍然使用 .j2
,但如果您想使用非 Jinja 特定的文件扩展名以外的其他内容,那么官方 Jinja 模板引擎文档现在建议使用 .jinja
(参见 docs here, or when the change was added),我认为人们会开始朝这个方向发展(并放弃使用 .j2
或 .jinja2
)。
如官方网页所述,文件扩展名无关紧要,但对于语法高亮,某些 IDE 可以使用 .jinja
。
最新的 Jinja 3.0 版本也是如此。
Template File Extension As stated above, any file can be loaded as a template, regardless of file extension. Adding a .jinja extension, like user.html.jinja may make it easier for some IDEs or editor plugins, but is not required. Autoescaping, introduced later, can be applied based on file extension, so you’ll need to take the extra suffix into account in that case.
Another good heuristic for identifying templates is that they are in a templates folder, regardless of extension. This is a common layout for projects.
您可以在这里查看最新版本:https://jinja.palletsprojects.com/en/3.0.x/templates/