如何设置django 1.8使用jinja2?

时间:2015-05-17 15:10:59

标签: python django python-3.x jinja2

所以,既然django正式支持Jinja 2作为模板引擎,我希望启用它就像在配置中切换一行一样简单。但是当我这样做时,jinja找不到我的模板。

我的理解是我可以手动配置目录列表以便查找模板,但我希望它的行为与默认情况下的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 个答案:

答案 0 :(得分:7)

app dirs的Jinja模板文件夹默认为jinja2而不是标准templates文件夹。

请尝试以下目录结构,Django将找到您的Jinja模板:

mysite
    mysite
    myapp
        jinja2
            myapp  
                index.html
    manage.py

答案 1 :(得分:1)

要考虑的另一件事是render_to_response不能为jinja2模板采用context_instance

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,
}

答案 2 :(得分: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

答案 3 :(得分:0)

app dirs的Jinja模板文件夹默认为jinja2而不是标准模板文件夹。

请尝试以下目录结构,Django将找到您的Jinja模板:

mysite的     我的网站     MYAPP         Jinja2的             MYAPP
                的index.html     manage.py

而不是:      return render(request,' myapp / index.html') 你应该写:      return render(request,' index.html')