Как настроить django 1.8 для использования jinja2?
Итак, теперь, когда django официально поддерживает Jinja 2 в качестве движка шаблонов, я надеялся, что включить его будет так же просто, как переключить строку в конфигурации. Но когда я делаю это, Джинджа не может найти мои шаблоны.
Насколько я понимаю, я мог бы вручную настроить список каталогов для поиска шаблонов, но я бы хотел, чтобы он вел себя точно так же, как DTL ведет себя по умолчанию. (т.е. посмотрите в каталог /templates). По сути, мое приложение структурировано так, как это предлагается в официальном руководстве, и я хотел бы использовать jinja, не меняя ничего другого. Является ли это возможным?
Вот как выглядит мой файл setings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
},
]
Я получаю ошибку TemplateDoesNotExist at /
и вот моя структура каталогов:
mysite
mysite
myapp
templates
myapp
index.html
manage.py
обратите внимание, что я надеюсь не использовать какие-либо внешние модули.
отредактируйте: как требуется, вот код, вызывающий шаблон:
def index(request):
return render(request, 'myapp/index.html')
4 ответа
Папка шаблонов Jinja для папок приложения по умолчанию jinja2
не стандарт templates
папка.
Поэтому попробуйте следующую структуру каталогов, и Django найдет ваши шаблоны Jinja:
mysite
mysite
myapp
jinja2
myapp
index.html
manage.py
Еще одна вещь, которую следует учитывать, это то, что 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,
}
Бэкэнд шаблона 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
,
Папка шаблонов Jinja для папок приложения по умолчанию - jinja2, а не стандартная папка шаблонов.
Поэтому попробуйте следующую структуру каталогов, и Django найдет ваши шаблоны Jinja:
mysite mysite myapp jinja2 myapp
index.html manage.py
И вместо: return render(request, 'myapp/index.html') вы должны написать: return render(request, 'index.html')