Django Custom Form DizoneError, хотя файл находится в том же каталоге
-
21-12-2019 - |
Вопрос
Я работаю через Эффективное руководство Django's .В настоящее время у меня есть проблема, пытаясь создать пользовательскую форму для использования в приложении.Я создал Forms.cpy файл как указан в Эта часть учебника и сделала изменения вMy 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'
.
Line 5 Линия в Proys.py, где я импортирую форму .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 поиск для импорта является корнем проекта, и нет модуля, названного как формы.
Так что, если вы хотите проверить, создайте файл с именованными формами в корне проекта, и он импортирует его.
Таким образом, следующее наверняка будет работать
from contacts.forms import FormClassName # or wildcard '*'
.