我正在开发一个Django项目并将其部署到OpenShift PaaS。起初一切正常,但经过一些与模板系统无关的更改(我添加了django-hosts)后出现了一些问题,并且出现"module object 'template' has no attribute 'loader'"
错误。甚至更奇怪的是,每次wsgi app重启后它只出现了两次,并且在第3次请求时一切都开始工作了。我在破损之前回到最后一次提交,但问题仍然存在。我从头开始重新创建项目并重新安装我的Django应用程序,但它也没有去;每次都会出现错误,而不仅仅是前2个请求。
from django import template
确实导入了模板模块对象,但与预期相比,此对象缺少约5个属性,包括loader
。
然后我注意到,如果我尝试从本地运行Django shell中的相同代码,也会发生同样的事情。但它仍然适用于我的应用程序的views.py与本地Django开发服务器。并且最初用于在OpenShift中工作。我尝试将from django import template
替换为from django.template import loader
并直接调用loader
- 并且一切正常工作
我想我对Python导入并不了解。
之间的区别是什么import a
a.b
和
from a import b
b
为什么第一个例子中的a.b可以在第二个中丢失属性b?
答案 0 :(得分:1)
之所以发生这种情况是因为模板是django中的一个包,而loader是一个模块,而你期望模板是模块和加载器的一个属性。它按预期工作。