【发布时间】:2015-03-14 10:36:10
【问题描述】:
我有一个 Django 问题,它只是偶尔会在查找模板时遇到问题。它将运行好几个小时,然后突然无法提供某些模板。有时问题会自行纠正,但总是可以通过运行touch <template> 来解决。我目前的解决方案是一个 cronjob,它每分钟执行一次touch <project root>,只要 cron 跟上它就可以工作。但是,我想找出一个合适的解决方案来解决我的问题。
相关设置:
PROJECT_ROOT = os.path.dirname(__file__)
APPS_ROOT = os.path.abspath(os.path.join(PROJECT_ROOT, "apps"))
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
(PROJECT_ROOT + '/templates'),
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.request",
"django.core.context_processors.i18n",
"django.contrib.messages.context_processors.messages",
"base_site.context_processors.app_list"
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
【问题讨论】:
-
您的设置中有静态文件查找器吗?
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', # 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) -
尝试在 app 目录中添加一个名为“templates”的文件夹,而不是在 project_root 目录中。如果可行,则运行“manage.py collectstatics”将所有应用静态文件归为一个
-
我不认为问题出在静态文件上?问题是 django 抛出 TemplateDoesNotExist,并详细说明 django 无法在
<project_root>/templates/admin/.../<template file>.html找到模板,即使该文件存在。我在管理员中修改页面的大多数模板,我的理解是把它们放在项目根目录下是 django 找到正确模板的唯一方法? -
@Astraub 你正在用你自己的覆盖默认模板目录,所以现在它只会搜索应用程序目录(而不是项目目录)你知道吗?但是管理模板只能放在项目目录中。 !
-
我尝试将管理模板添加到 PROJECT_ROOT/apps 内的应用程序中无济于事,django 仍然抛出 TemplateDoesNotExist 列出应用程序中的模板和 PROJECT_ROOT/templates 中的模板作为文件检查。
标签: python django django-templates django-admin