9

我在 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__'
4

3 回答 3

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,您可以在其中拥有一个浏览器内调试器,以便在发生错误时快速查看变量的值。

现在,我强烈怀疑导致此问题的模块是piston[相关线程]。__init__.py您可以通过在任何目录中创建文件来修复它piston

于 2012-09-22T04:20:19.693 回答
11

当尝试使用不是 Python 包的应用程序时会出现此问题,因此请确保您的应用程序__init__.py在其根目录中有文件。

于 2012-09-22T10:35:46.227 回答
3

Python 3.X 更新

__init__.py虽然您可以在没有文件的情况下导入模块,

需要这些__init__.py文件才能使 Python 将目录视为包含包

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__'
于 2019-08-09T19:29:32.327 回答