如文档中所述,从4.1开始,模板加载的默认行为发生了巨大变化。
如果我没理解错的话,在4.0之前,它是这样工作的:
- 启用DEBUG后,每个请求都会加载模板,因此,如果您在处理模板时不断进行更改和重新加载,则始终会看到最新版本。
- 如果禁用DEBUG,则在初始化应用程序时会缓存模板,因此只有在重新启动应用程序时才能看到模板中的更改。
这样,模板缓存就可以在生产环境中无缝启用,这非常棒。
现在包含了this ticket建议,如果我理解正确的话,必须指定模板加载方法,它不再与DEBUG设置绑定,并且默认情况下缓存。
我们需要原始行为,以便前端开发人员无需重新启动应用即可看到更改,并且我们还希望生产部署启用缓存,因此我们这样做:
develop_loaders = [
"django.template.loaders.filesystem.Loader",
"django.template.loaders.app_directories.Loader",
]
production_loaders = [
("django.template.loaders.cached.Loader", [
"django.template.loaders.filesystem.Loader",
"django.template.loaders.app_directories.Loader",
"path.to.custom.Loader",
])
]
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [
"templates",
],
"OPTIONS": {
"context_processors": [
"maintenance_mode.context_processors.maintenance_mode",
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
"wagtail.contrib.settings.context_processors.settings",
],
"loaders": develop_loaders if DEBUG else production_loaders,
},
},
]
这是可行的,但我想知道,我得到的情况正确吗?你认为这是一个坚实的解决方案吗?。
我也花了一段时间,因为当我阅读4.1的变更日志时,我并没有意识到这个变更会有这样的影响(我们之前从未在设置中指定任何加载器),所以我们希望默认行为会得到尊重,这导致了gunicorn和docker被视为第一个可疑的罪魁祸首,等等...所以我想这个问题可能对其他处于类似情况的人有用。
1条答案
按热度按时间4xrmg8kj1#
问题不在于缓存的加载程序,而在于操作系统的信号处理。缓存的加载程序有一个在
file_changed
上调用的reset
方法,这样即使在调试缓存的模板时也能受益。您使用
runserver_plus
吗?它有一个问题:https://github.com/django-extensions/django-extensions/issues/1766我在使用正常的
runserver
命令时没有遇到此问题。