Domanda

Sto lavorando attraverso Efficace serie Django's serie tutorial.Attualmente sto avendo un problema cercando di creare un modulo personalizzato da utilizzare in un'app.Ho creato il file forms.py come indicato in questa parte del tutorial e ha fatto le modifiche ail mio file viste.py.La mia struttura di directory è simile a questa:

(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
.

Il problema è che quando provo a caricare il sito ottengo il seguente errore:

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 è la linea in viste.py dove importa il file forms.py.Lo snippet di codice (con poche righe di buffer) è:

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'
.

Come puoi vedere dall'albero della directory, il file Forms.py dovrebbe essere accessibile.Non sono sicuro del motivo per cui ho ricevuto l'errore.Qualche idea?

Modifica 1

Ho provato a cambiare l'importazione su from forms import ContactForm prima di pubblicare in origine.Ho ancora lo stesso errore:

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

È stato utile?

Soluzione

Per quanto ne so, ci sono cambiamenti nel sistema di importazione in Python 3. Sii più specifico su ciò che vuoi importare.Presumo che tu voglia importare forms.py da contacts, quindi

from contacts import forms
.

o puoi provare

import .forms
.

Altri suggerimenti

È un impero per farlo come questo:

from forms import FormClassName
.

o puoi

from forms import *
.

Ma non è nessario. Dalle altre app devi

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

Quando si importa la directory che Python cerca per l'importazione è il radice del progetto e non c'è modulo denominato come moduli.

Quindi se vuoi testare creare un file denominato moduli nella radice del progetto e lo importa.

In questo modo che seguirà sicuramente

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top