我查看了Google在Stackoverflow上找到的所有TemplateDoesNotExist问题。但是,我无法解决这个错误。
我安装的应用:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'remarket',
'polls',
)
模板加载器:
TEMPLATE_LOADERS = ('django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader')
但是,当request / polls /进来时,Django只能查看admin和auth应用程序。它不会在民意调查应用程序下查找index.html的应用程序下的模板。这是直接来自Django Poll App的例子。
任何人都可以找到我失踪的东西吗?
另外,我知道如何让它发挥作用#39;您只需将模板移出应用程序目录并进入项目目录即可。然后,您可以设置TEMPLATE_DIR为您找到它。但是,这会消除应用程序的可重用性。所以,请向我解释我们如何修复它,以便维护可重用的应用程序功能。
答案 0 :(得分:1)
我遇到一个TemplateDoesNotExist
错误,从可插拔应用(wagtail_references)中找到模板。当我将应用程序重构为另一个项目并开始将其作为依赖项安装到主项目中时,该错误就会出现。
模板加载器验尸表明,它甚至没有在我应用的templates
目录中查找。
我的应用包含在INSTALLED_APPS
中,并且其AppConfig具有有效路径。
最终的解决方案是我没有正确打包应用程序...因此,/ templates /目录位于github上,但没有在构建版本中!我错过了MANIFEST.in
文件from step 6 of the django tutorial。
将以下MANIFEST.in
文件添加到我的软件包的根目录中后,对我进行了排序:
include LICENSE
include README.md
recursive-include wagtail_references/static *
recursive-include wagtail_references/templates *
recursive-include docs *
(感谢this post帮助我找到了方向)
答案 1 :(得分:0)
模板加载器 app_directories.Loader 应该在app目录下查找模板。请注意,此加载程序从 your_app / templates 开始。现在,要使用命名空间概念将某个模板与某个应用相关联,我们会创建一个与应用程序名称相同的子目录,以便路径现在如下所示:your_app / templates / your_app。
然后,该应用的所有模板都可以进入第二个 your_app 子目录。 “bug”是指您希望在第二个 your_app 子目录下找到template_name ='index.html',但Django不会在那里找到它。
解决此问题的方法是知道Loader从 your_app 子目录的templates目录开始,因此始终从模板子目录开始命名模板名称: Template_names = your_app / index.html
这对我有用,我想与任何遇到同样问题的人分享。如果你有其他方法可以分享,请分享。