Как настроить 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 ')

  • Изменение текста на ярлыке
  • Превращение этого кода в функцию python
  • В Python argparse, возможно ли иметь парные --no-something / - что-то аргументы?
  • Получить объект с максимальным значением атрибута в списке объектов
  • Как установить anano в Anaconda ver. 2.1 Windows 64 бит для Python 3.4?
  • Python 3 Аннотации: Тип, указывающий список указанного типа (PyCharm)
  • Как получить вызывающее выражение функции в Python?
  • Является ли Python 3.3 лучше, чем 2,7 для декодирования и повторного кодирования Скребковый веб-текст для UTF-8? Как, намного лучше?
  • Python - лучший язык программирования в мире.