Есть ли идиоматическое расширение файла для шаблонов Jinja?
Мне нужно программно различать файлы шаблонов Jinja, другие файлы шаблонов (например, ERB) и текстовые файлы без шаблонов.
Согласно документации Jinja:
Шаблон Jinja не нуждается в определенном расширении:.html,.xml или любое другое расширение просто отлично.
Но что я должен использовать, когда требуется явное расширение? .py
вводит в заблуждение, и любой поиск, включающий слова "jinja" и "extension", плохо просматривается путем обсуждения Jinja Extensions.
Я мог бы легко диктовать соглашение по всему проекту (.jnj
или .ja
), но это для открытого источника, поэтому я не хочу выкапывать тренд, если там уже была установлена практика.
EDIT 1: Опять же, я понимаю, что проект Jinja — целенаправленно — не определяет расширение файла по умолчанию. Я спрашиваю, существуют ли какие-либо неофициальные соглашения, которые возникли для обстоятельств, когда требуется по какой-то конкретной причине проекта.
ИЗМЕНИТЬ 2: Уточнение: это не для содержимого HTML.
Ответы
Ответ 1
Jinja Авторы не определили расширение по умолчанию. Большинство редакторов шаблонов Jinja, таких как расширение Vim, расширение TextMate, расширение Emacs, а PyCharm упоминает расширение по умолчанию для чтобы подчеркнуть Jinja.
В Django уже было аналогичная дискуссия об установке расширения по умолчанию и закончилась как проблема с wontfix. Я цитирую последнее сообщение:
Определение типа файла на основе расширения ошибочно по тем причинам, которые описаны в этих комментариях, поэтому вам нужно сделать некоторые внутренние проверки, как работает обнаружение типа MIME.
Я предлагаю вам использовать свой собственный, поскольку нет общего.
Ответ 2
Ansible использует расширение .j2
.
Я не мог найти окончательную документацию об этой точной точке, но мы видим вхождения расширения .j2
во многих местах своей документации:
Если вы ищете .j2
на следующих страницах, вы увидите много случаев:
http://docs.ansible.com/ansible/template_module.html
http://docs.ansible.com/ansible/playbooks_intro.html
Это соглашение, которое я использую для других проектов, кроме шаблонов django.
Ответ 3
Просто FYI - Johnride, выше упомянутый о Ansible, используя .j2
в качестве своего условного обозначения для файла шаблона, который является правильным, просто указывая на "лучшие практики", задокументированные им теперь выпущены, в котором говорится:
шаблоны заканчиваются на .j2
Ответ 4
Я использую расширение .jnj - и для выделения синтаксиса и для фрагментов в vim я просто скопировал, переименовал и изменил настройки для twig.
Когда мне нужны некоторые настройки для html (например, комментирование, балансировка тегов, отступы и т.д.) в шаблоне jinja, у меня также есть функция, установленная некоторое время назад для работы с 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>
Ответ 5
Я использую .html.jinja2
, .js.jinja2
, .css.jinja2
и т.д., чтобы указать, что (a) это шаблон Jinja2 и (b) будет скомпилирован в HTML, JS или файл CSS. Мне нравится выбор .j2
в Ansible, но IMO, использующий .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