Как настроить django 1.8 для использования jinja2?

Итак, теперь, когда django официально поддерживает Jinja 2 в качестве механизма моделирования шаблонов, я надеялся, что это будет так же просто, как переключение строки в config. Но когда я это делаю, jinja не может найти мои шаблоны.

Мое понимание заключается в том, что я могу вручную настроить список каталогов для поиска шаблонов, но я бы хотел, чтобы он вел себя так же, как DTL ведет себя по умолчанию. (т. е. посмотрите в каталоге / templates). В основном, мое приложение структурировано так, как оно предлагается в официальном учебнике, и я хотел бы использовать jinja, не изменяя ничего другого. Является ли это возможным?

Вот как выглядит мой файл setup.py:

TEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'APP_DIRS': True, }, ] 

Ошибка, которую я получаю, это TemplateDoesNotExist at /

и вот моя структура каталогов:

 mysite mysite myapp templates myapp index.html manage.py 

обратите внимание, что я надеюсь не использовать внешние модули.

edit: по запросу, вот код, вызывающий шаблон:

 def index(request): return render(request, 'myapp/index.html') 

4 Solutions collect form web for “Как настроить django 1.8 для использования jinja2?”

В папке шаблонов Jinja для приложений dirs по умолчанию используется jinja2 не стандартная папка templates .

Поэтому попробуйте следующую структуру каталогов, и Django найдет ваши шаблоны Jinja:

 mysite mysite myapp jinja2 myapp index.html manage.py 

Шаблон шаблона Jinja2 ищет папку jinja2 в каталогах приложений, а не templates . Это имеет преимущество предотвращения путаницы шаблонов DTL и Jinja2, особенно если вы включили в свой проект несколько шаблонов шаблонов.

Я бы рекомендовал придерживаться поведения по умолчанию и переименовать ваш каталог templates в jinja2 . Однако, если вы должны изменить его, вы можете создать собственный бэкэнд и установить app_dirname .

 from django.template.backends.jinja2 import Jinja2 class MyJinja2(jinja2): app_dirname = 'templates' 

Затем в настройке TEMPLATES используйте path.to.MyJinja2 вместо django.template.backends.jinja2.Jinja2 .

Другое дело, что render_to_response не может принимать context_instance для шаблонов jinja2

https://github.com/django-haystack/django-haystack/issues/1163

Я верю, но я могу ошибаться, но я думаю, что jinja2 не может использовать тот же каталог, что и шаблоны django. пытаться

 TEMPLATES = { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [os.path.join(PROJECT_ROOT, 'jinja2'),], 'APP_DIRS': True, } 

В папке шаблонов Jinja для приложений dirs по умолчанию используется jinja2, а не стандартная папка шаблонов.

Поэтому попробуйте следующую структуру каталогов, и Django найдет ваши шаблоны Jinja:

mysite mysite myapp jinja2 myapp
index.html manage.py

И вместо: return render (request, 'myapp / index.html) вы должны написать: return render (request,' index.html ')

  • TypeError: элемент последовательности 1: ожидается байтоподобный объект, str найден
  • Обнаружение столкновения в игре на черепе Python
  • Почему сигналы не выделяются?
  • Отформатируйте строку, в которой есть дополнительные фигурные скобки
  • Ошибка Python 3.5 OpenSSL
  • Проблемы с проверкой существования файла Python - если я не добавляю оператор печати
  • Совместимость с Python 3 от BeautifulSoup
  • Замена метода во время выполнения без обновления Частные атрибуты
  • Как я могу увидеть формулы таблицы Excel в pandas / python?
  • Как читать и писать INI-файл с Python3?
  • Использование нескольких версий Python
  • Python - лучший язык программирования в мире.