2015-05-17 2 views
1

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

Мое понимание, что я мог бы вручную настроить список каталогов для поиска шаблонов, но я бы хотел, чтобы он вел себя точно так же, как и 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') 
+0

Можете ли вы показать нам код в своем представлении, где вы вызываете шаблон? – StvnW

+0

@StvnW Добавлен к вопросу. – maniexx

+0

Se [этот ответ] (http://stackoverflow.com/questions/30701631/how-to-use-jinja2-as-a-templating-engine-in-django-1-8/30715508#30715508), я думаю это помогает с вашим вопросом. – doru

ответ

1

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

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

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

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

Папка шаблон Дзиндзя для приложения DIRS по умолчанию для jinja2 не стандартной templates папки.

Так попробуйте следующую структуру каталогов и Django будет найти шаблоны дзиндзя:

mysite 
    mysite 
    myapp 
     jinja2 
      myapp 
       index.html 
    manage.py 
+0

спасибо, это действительно помогло мне – ThinkTeamwork

1

Шаблон бэкенд 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.

0

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

Так попробуйте следующую структуру каталогов и Django будет найти шаблоны дзиндзя:

MySITE MySite MyApp jinja2 MyApp
index.html manage.py

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