Ast*_*aub 11 python django django-templates django-admin
我有一个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',
)
Run Code Online (Sandbox Code Playgroud)
TGO*_*TGO 26
只想添加另一个案例,您可能会收到Template Does Not Exist错误.
确保您已将应用添加INSTALLED_APPS到settings.py文件中的变量中.这个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 :)
]
Run Code Online (Sandbox Code Playgroud)
我知道这很愚蠢,但我知道因为忘记系好安全带而导致驾驶员考试失败的人,所以忘记一行代码并不像听起来那么罕见.
小智 7
尝试像这样更新您的设置:
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates'),)
Run Code Online (Sandbox Code Playgroud)
(这是在 django 1.8 中获取 BASE_DIR 的默认方式)。在 Python 3.4 之前,__file__不保证给出绝对文件路径。
您还应该尝试使用 os.path.join 而不是将目录添加为字符串(其他平台使用反斜杠)来保持平台不可知。
所以事实证明我的问题不在于 Django 本身,而在于我的环境。我从 ~/Django-project 运行 Django 服务器,一旦所有会话都注销,我们的开发服务器就会加密主目录,这意味着服务无法再找到它。将项目移动到 /var/ 并后台管理 manage.py runserver 命令使项目不再出现“模板不存在”错误。
| 归档时间: |
|
| 查看次数: |
15937 次 |
| 最近记录: |