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 了(原文链接),如下所示:
正确的做法是将以前的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的配置,见上面代码。
特此记录,帮大家少走弯路。