Подтвердить что ты не робот

Есть ли идиоматическое расширение файла для шаблонов Jinja?

Мне нужно программно различать файлы шаблонов Jinja, другие файлы шаблонов (например, ERB) и текстовые файлы без шаблонов.

Согласно документации Jinja:

Шаблон Jinja не нуждается в определенном расширении:.html,.xml или любое другое расширение просто отлично.

Но что я должен использовать, когда требуется явное расширение? .py вводит в заблуждение, и любой поиск, включающий слова "jinja" и "extension", плохо просматривается путем обсуждения Jinja Extensions.

Я мог бы легко диктовать соглашение по всему проекту (.jnj или .ja), но это для открытого источника, поэтому я не хочу выкапывать тренд, если там уже была установлена ​​практика.


EDIT 1: Опять же, я понимаю, что проект Jinja — целенаправленно — не определяет расширение файла по умолчанию. Я спрашиваю, существуют ли какие-либо неофициальные соглашения, которые возникли для обстоятельств, когда требуется по какой-то конкретной причине проекта.


ИЗМЕНИТЬ 2: Уточнение: это не для содержимого HTML.

4b9b3361

Ответ 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