Django 自定义表单 ImportError 即使文件位于同一目录中
-
21-12-2019 - |
题
我正在努力通过 有效的 Django 教程系列。我目前在尝试创建要在应用程序中使用的自定义表单时遇到问题。我按照中的说明创建了 forms.py 文件 本教程的这一部分, ,并对我的views.py 文件进行了更改。我的目录结构如下所示:
(project root)
|
├── address.db
├── addressbook
│ ├── __init__.py
│ ├── __pycache__
│ ├── settings.py
│ ├── static
│ ├── urls.py
│ └── wsgi.py
├── contacts
│ ├── __init__.py
│ ├── admin.py
│ ├── forms.py
│ ├── models.py
│ ├── templates
│ ├── tests.py
│ └── views.py
├── manage.py
└── requirements.txt
问题是,当我尝试加载该网站时,出现以下错误:
Traceback (most recent call last):
File "/Users/wtodom/.virtualenvs/tutorial/lib/python3.3/site-packages/django/core/handlers/base.py", line 101, in get_response
resolver_match = resolver.resolve(request.path_info)
File "/Users/wtodom/.virtualenvs/tutorial/lib/python3.3/site-packages/django/core/urlresolvers.py", line 318, in resolve
for pattern in self.url_patterns:
File "/Users/wtodom/.virtualenvs/tutorial/lib/python3.3/site-packages/django/core/urlresolvers.py", line 346, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/wtodom/.virtualenvs/tutorial/lib/python3.3/site-packages/django/core/urlresolvers.py", line 341, in urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
File "/Users/wtodom/.virtualenvs/tutorial/lib/python3.3/importlib/__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1586, in _gcd_import
File "<frozen importlib._bootstrap>", line 1567, in _find_and_load
File "<frozen importlib._bootstrap>", line 1534, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 586, in _check_name_wrapper
File "<frozen importlib._bootstrap>", line 1024, in load_module
File "<frozen importlib._bootstrap>", line 1005, in load_module
File "<frozen importlib._bootstrap>", line 562, in module_for_loader_wrapper
File "<frozen importlib._bootstrap>", line 870, in _load_module
File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
File "/Users/wtodom/.virtualenvs/tutorial/addressbook/urls.py", line 4, in <module>
import contacts.views
File "/Users/wtodom/.virtualenvs/tutorial/contacts/views.py", line 5, in <module>
import forms
ImportError: No module named 'forms'
第 5 行是views.py 中导入forms.py 文件的行。代码片段(带有几行缓冲区)是:
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView
from django.core.urlresolvers import reverse
from contacts.models import Contact
import forms
class ListContactView(ListView):
model = Contact
template_name = 'contact_list.html'
从目录树中可以看到,forms.py 文件应该是可访问的。我不确定为什么会收到错误。有任何想法吗?
编辑1
我尝试将导入更改为 from forms import ContactForm
在最初发布之前。我仍然遇到同样的错误:
File "/Users/wtodom/.virtualenvs/tutorial/contacts/views.py", line 5, in <module>
from forms import ContactForm
ImportError: No module named 'forms'
解决方案
据我所知,Python 3 中的导入系统发生了变化。只需更具体地说明您要导入的内容即可。我假设你想导入 forms.py
从 contacts
所以
from contacts import forms
或者你可以尝试
import .forms
其他提示
这样做是正确的:
from forms import FormClassName
或者你可以
from forms import *
但这不是必需的。您必须从其他应用程序
from contacts.forms import FormClassName # or wildcard '*'
导入时,python搜索导入的目录是项目根目录,并且没有名为forms的模块。
因此,如果您想测试在项目根目录中创建一个名为 forms 的文件,它将导入它。
这样跟随肯定会起作用
from contacts.forms import FormClassName # or wildcard '*'
不隶属于 StackOverflow