我正在Windows机器上设置一个新的开发环境,在成功安装Python和django之后,我在新机器上克隆了我的存储库。
成功运行manage.py syncdb
后,我运行了manage.py runserver
,但点击localhost:8000
会导致标题出错。我跑了django-admin.py startproject testproject
并从那里运行了manage.py runserver
,那个项目加载得很好,所以我想我可能已经排除了我的django安装,但我需要在这里进行下一步。
这是我的应用程序中的堆栈跟踪炸弹。你能给我的任何帮助都将不胜感激。
Environment:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 1.4.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'api',
'contact',
'lessons',
'mainsite',
'piston',
'registration',
'utils')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Matthew\myapp\harmonyschedules\mainsite\views.py" in index
16. return render_to_response('mainsite/index_redes.html', context_instance=RequestContext(request))
File "C:\Python27\lib\site-packages\django\shortcuts\__init__.py" in render_to_response
20. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "C:\Python27\lib\site-packages\django\template\loader.py" in render_to_string
169. t = get_template(template_name)
File "C:\Python27\lib\site-packages\django\template\loader.py" in get_template
145. template, origin = find_template(template_name)
File "C:\Python27\lib\site-packages\django\template\loader.py" in find_template
128. loader = find_template_loader(loader_name)
File "C:\Python27\lib\site-packages\django\template\loader.py" in find_template_loader
95. mod = import_module(module)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
35. __import__(name)
File "C:\Python27\lib\site-packages\django\template\loaders\app_directories.py" in <module>
24. template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
Exception Type: AttributeError at /
Exception Value: 'module' object has no attribute '__file__'
答案 0 :(得分:17)
导入settings.INSTALLED_APPS
时会出现问题:
for app in settings.INSTALLED_APPS:
try:
mod = import_module(app)
except ImportError as e:
raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
似乎更容易确定哪个模块导致了问题。在Django中调试此类问题的一种常见方法是使用Werkzeug,您可以使用 in-browser 调试器快速查看发生错误时变量的值。
现在,我强烈怀疑导致此问题的模块是piston
[relevant thread]。您可以通过在__init__.py
所在的目录中创建piston
文件来解决此问题。
答案 1 :(得分:8)
当尝试使用不是Python包的应用程序时会出现此问题,因此请确保您的应用程序在其根目录中有__init__.py
个文件。
答案 2 :(得分:1)
Python 3.X更新
虽然您可以导入不存在__init__.py
文件的模块
要使Python将目录视为包含软件包,必须使用
__init__.py
文件
https://docs.python.org/3/tutorial/modules.html
如果没有__init__.py
,则该模块没有__file__
属性。
example/
|-- mod1
| `-- __init__.py
`-- mod2
>>> import mod1
>>> mod1.__file__
'/tmp/example/mod1/__init__.py'
>>> import mod2
>>> mod2.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'mod2' has no attribute '__file__'