找不到Django模板

时间:2015-01-15 21:43:42

标签: python django django-templates django-admin

我有一个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',
)

3 个答案:

答案 0 :(得分:22)

只是想添加另一个案例,您可能会收到Template Does Not Exist错误。

确保您已在INSTALLED_APPS文件中的settings.py变量中添加了应用。 <{1}}命令是不够的。

startapp

我知道这很愚蠢,但我知道因为忘记系好安全带而导致驾驶员考试失败的人,所以忘记一行代码并不像听起来那么罕见。

答案 1 :(得分:3)

尝试更新您的设置:

PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates'),)

(这是在django 1.8中获取BASE_DIR的默认方式)。在Python 3.4之前,__file__不能保证提供绝对文件路径。

您还应该尝试使用os.path.join保持与平台无关,而不是将目录添加为字符串(其他平台使用反斜杠)。

答案 2 :(得分:1)

事实证明我的问题不在于Django本身,而在于我的环境。我从〜/ Django-project运行Django服务器,一旦所有会话都退出,我们的dev服务器就会加密主目录,这意味着服务无法再找到它。将项目移动到/ var /并守护manage.py runserver命令使项目不受模板不存在错误的影响。