在 Django 1.6 中,如果你无法导入自定义应用,通常是由于一些常见的配置问题,如 INSTALLED_APPS
配置不正确、应用目录结构不符合 Django 规范,或者路径问题。
1、问题背景
在使用 Django 1.6 创建一个简单的项目时,遇到了导入自定义应用的问题。项目结构如下:
root/manage.pymysite/apps/__init__.pyapp1/urls.pyviews.pysettings.pyurls.py__init__.py
在 settings.py
文件中,已将 app1
安装到 INSTALLED_APPS
中。当尝试在根 urls.py
中修改导入自定义应用的代码时,却遇到了以下错误:
Traceback (most recent call last):File "D:\Python33\lib\site-packages\django\core\urlresolvers.py", line 339, in urlconf_modulereturn self._urlconf_module
AttributeError: 'RegexURLResolver' object has no attribute '_urlconf_module'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "D:\Python33\lib\site-packages\django\core\handlers\base.py", line 101, in get_responseresolver_match = resolver.resolve(request.path_info)File "D:\Python33\lib\site-packages\django\core\urlresolvers.py", line 318, in resolvefor pattern in self.url_patterns:File "D:\Python33\lib\site-packages\django\core\urlresolvers.py", line 346, in url_patternspatterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)File "D:\Python33\lib\site-packages\django\core\urlresolvers.py", line 341, in urlconf_moduleself._urlconf_module = import_module(self.urlconf_name)File "D:\Python33\lib\importlib\__init__.py", line 90, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)File "<frozen importlib._bootstrap>", line 1584, in _gcd_importFile "<frozen importlib._bootstrap>", line 1565, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1532, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 584, in _check_name_wrapperFile "<frozen importlib._bootstrap>", line 1022, in load_moduleFile "<frozen importlib._bootstrap>", line 1003, in load_moduleFile "<frozen importlib._bootstrap>", line 560, in module_for_loader_wrapperFile "<frozen importlib._bootstrap>", line 868, in _load_moduleFile "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removedFile "D:/project/worldcup\worldcup\urls.py", line 4, in <module>url(r'^app1/', include('apps.app1.urls')),File "D:\Python33\lib\site-packages\django\conf\urls\__init__.py", line 26, in includeurlconf_module = import_module(urlconf_module)File "D:\Python33\lib\importlib\__init__.py", line 90, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)File "<frozen importlib._bootstrap>", line 1584, in _gcd_importFile "<frozen importlib._bootstrap>", line 1565, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1512, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removedFile "<frozen importlib._bootstrap>", line 1584, in _gcd_importFile "<frozen importlib._bootstrap>", line 1565, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1512, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removedFile "<frozen importlib._bootstrap>", line 1584, in _gcd_importFile "<frozen importlib._bootstrap>", line 1565, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1529, in _find_and_load_unlocked
ImportError: No module named 'apps'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "D:\Python33\lib\wsgiref\handlers.py", line 137, in runself.result = application(self.environ, self.start_response)File "D:\Python33\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__return self.application(environ, start_response)File "D:\Python33\lib\site-packages\django\core\handlers\wsgi.py", line 206, in __call__response = self.get_response(request)File "D:\Python33\lib\site-packages\django\core\handlers\base.py", line 196, in get_responseresponse = self.handle_uncaught_exception(request, resolver, sys.exc_info())File "D:\Python33\lib\site-packages\django\core\handlers\base.py", line 231, in handle_uncaught_exceptionreturn debug.technical_500_response(request, *exc_info)File "D:\Python33\lib\site-packages\django\views\debug.py", line 69, in technical_500_responsehtml = reporter.get_traceback_html()File "D:\Python33\lib\site-packages\django\views\debug.py", line 323, in get_traceback_htmlc = Context(self.get_traceback_data())File "D:\Python33\lib\site-packages\django\views\debug.py", line 281, in get_traceback_dataframes = self.get_traceback_frames()File "D:\Python33\lib\site-packages\django\views\debug.py", line 428, in get_traceback_framespre_context_lineno, pre_context, context_line, post_context = self._get_lines_from_file(filename, lineno, 7, loader, module_name)File "D:\Python33\lib\site-packages\django\views\debug.py", line 379, in _get_lines_from_filesource = loader.get_source(module_name)File "<frozen importlib._bootstrap>", line 605, in _requires_frozen_wrapper
ImportError: importlib._bootstrap is not a frozen module
[08/Dec/2013 22:25:59] "GET /user/hello/ HTTP/1.1" 500 59
2、解决方案
要解决此问题,可以执行以下步骤:
- 确保
apps
目录在 PYTHONPATH 中。可以通过在命令行中输入echo $PYTHONPATH
来检查 PYTHONPATH。如果apps
目录不在 PYTHONPATH 中,可以通过在.bashrc
或.zshrc
文件中添加以下行来将其添加到 PYTHONPATH 中:
export PYTHONPATH=$PYTHONPATH:/path/to/apps
-
确保
apps
目录包含一个__init__.py
文件。如果没有,请创建一个空的__init__.py
文件。 -
确保
apps/app1
目录包含一个urls.py
文件。如果没有,请创建一个空的urls.py
文件。 -
确保
apps/app1
目录包含一个views.py
文件。如果没有,请创建一个空的views.py
文件。 -
在
mysite/settings.py
文件中,确保INSTALLED_APPS
设置正确。应该如下所示:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','
如果这些步骤都完成了,并且问题依然存在,调试模式下的错误日志可以提供更详细的信息来帮助解决问题。