找不到 Django 模板

Django Template Not Found

我有一个 Django 问题,只是偶尔会在查找模板时遇到问题。它会 运行 好几个小时,然后突然无法提供某些模板。有时问题会自行解决,但 总是 可以被 运行 touch <template> 解决。我当前的解决方案是每分钟执行 touch <project root> 的 cronjob,只要 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',
)

尝试像这样更新您的设置:

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 来保持平台不可知,而不是将目录添加为字符串(其他平台使用反斜杠)。

原来我的问题不是 Django 本身,而是我的环境。我是来自 ~/Django-project 的 运行 Django 服务器,一旦所有会话都注销,我们的开发服务器就会加密主目录,这意味着服务无法再找到它。将项目移动到 /var/ 并守护 manage.py runserver 命令使项目免受模板不存在错误的影响。

只是想添加另一种可能会出现 Template Does Not Exist 错误的情况。

确保您已将应用程序添加到 settings.py 文件中的 INSTALLED_APPS 变量中。 startapp 命令还不够。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myappname', # add your app here :)
]

我知道这很愚蠢,但我知道有人因为忘记系好安全带而未能通过驾驶考试,所以忘记一行代码并不像听起来那么罕见。