Frage

Ich arbeite durch Effektive Djangos Tutorial-Reihe.Ich habe derzeit ein Problem beim Versuch, ein benutzerdefiniertes Formular zur Verwendung in einer App zu erstellen.Ich habe die Datei „forms.py“ wie in beschrieben erstellt Dieser Teil des Tutorials, und nahm die Änderungen an meiner Datei „views.py“ vor.Meine Verzeichnisstruktur sieht so aus:

(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

Das Problem ist, dass ich beim Versuch, die Site zu laden, die folgende Fehlermeldung erhalte:

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'

Zeile 5 ist die Zeile in „views.py“, in die ich die Datei „forms.py“ importiere.Der Codeausschnitt (mit ein paar Zeilen Puffer) lautet:

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'

Wie Sie dem Verzeichnisbaum entnehmen können, sollte auf die Datei „forms.py“ zugegriffen werden können.Ich bin mir nicht sicher, warum ich den Fehler erhalte.Irgendwelche Ideen?

Bearbeiten 1

Ich habe versucht, den Import auf zu ändern from forms import ContactForm vor dem ursprünglichen Posten.Ich habe immer noch den gleichen Fehler:

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

Lösung

Soweit ich weiß, gab es in Python 3 Änderungen im Importsystem.Geben Sie einfach genauer an, was Sie importieren möchten.Ich gehe davon aus, dass Sie importieren möchten forms.py aus contacts Also

from contacts import forms

oder du kannst es versuchen

import .forms

Andere Tipps

Es ist richtig, es so zu machen:

from forms import FormClassName

Oder du kannst

from forms import *

aber es ist nicht notwendig.Von anderen Apps müssen Sie

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

Beim Importieren ist das Verzeichnis, das Python nach dem Import durchsucht, das Projektstammverzeichnis und es gibt kein Modul mit dem Namen „forms“.

Wenn Sie also einen Test durchführen möchten, erstellen Sie eine Datei mit dem Namen „forms“ im Projektstammverzeichnis und diese wird importiert.

Auf diese Weise wird das Folgende sicher funktionieren

from contacts.forms import FormClassName # or wildcard '*'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top