Pregunta

Estoy trabajando a través de Efectivos de Django tutorial de la serie.Actualmente estoy teniendo un problema al intentar crear un formulario personalizado para su uso en una aplicación.He creado el forms.py archivo como se indica en esta parte del tutorial, y de hecho las alteraciones a mi views.py archivo.Mi estructura de directorios se parece a esto:

(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

El problema es que cuando intento cargar el sitio me sale el siguiente error:

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'

La línea 5 es la línea en views.py donde puedo importar forms.py archivo.El fragmento de código (con un par de líneas de buffer) es:

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'

Como se puede ver en el árbol de directorio, el forms.py el archivo debe ser accesible.No estoy seguro de por qué estoy recibiendo el error.Alguna idea?

Edición 1

He intentado cambiar la importación para el from forms import ContactForm antes de la publicación original.Yo todavía tengo el mismo error:

  File "/Users/wtodom/.virtualenvs/tutorial/contacts/views.py", line 5, in <module>
    from forms import ContactForm
ImportError: No module named 'forms'
¿Fue útil?

Solución

Que yo sepa hubo cambios en el sistema de importación en Python 3.Simplemente ser más específico acerca de lo que desea importar.Supongo que usted desea importar forms.py de contacts así

from contacts import forms

o usted puede intentar

import .forms

Otros consejos

Es adecuada para hacerlo como este:

from forms import FormClassName

O usted puede

from forms import *

pero no es así lo requiriesen.De otras aplicaciones que usted debe

from contacts.forms import FormClassName # or wildcard '*'

Al importar el directorio en el que python busca de importación es la raíz del proyecto y no hay ningún módulo denominado como formas.

Así que si quieres prueba a crear un archivo llamado formas en la raíz del proyecto y se va a importar.

De esa manera siguiente obrará

from contacts.forms import FormClassName # or wildcard '*'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top