Django 1.8.2 中使用 HamlPy的方法

       在 Django 1.8 之前,如果要在项目中使用 HamlPy 很简单,只需要在项目的 settings.py中增加一个配置TEMPLATE_LOADERS 即可。可以参考官方文档:https://github.com/jessemiller/HamlPy

       但如果你将 Django 版本升级到Django 1.8.2 (写此文时最高是1.8.2) 后,你就会发现之前的模板文件出问题了:用浏览器访问时直接把模板的原始内容输出来了,并未进行正确的转换。

       经排查发现在1.8 中原来的这种用法已经被标注为 Deprected 了(原文链接),如下所示:

Django 1.8.2 中使用 HamlPy的方法

 正确的做法是将以前的TEMPLATE_LOADERS中的内容,放到 OPTIONS里面的'loaders'配置中,如下所示:

修改前:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ]
        },
    },
]

 
 修改后:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': False,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'loaders':[
                'hamlpy.template.loaders.HamlPyFilesystemLoader',
                'hamlpy.template.loaders.HamlPyAppDirectoriesLoader'
            ],
        },
    },
]

在上面的配置中发生了两处变化,

变化一: 'APP_DIRS': True, 变成了 'APP_DIRS': False 也就是说你之前如果将模板文件放到每个 app 下面的话,此时可能必须要移到外面了,或者采用其他方法变通一下。

变化二: 在 OPTIONS 中增加了 loaders的配置,见上面代码。

特此记录,帮大家少走弯路。

相关推荐