نموذج Django المخصص ImportError على الرغم من وجود الملف في نفس الدليل
-
21-12-2019 - |
سؤال
أنا أعمل من خلال جانغو فعالة سلسلة تعليمية.أواجه حاليًا مشكلة أثناء محاولة إنشاء نموذج مخصص لاستخدامه في أحد التطبيقات.لقد قمت بإنشاء ملف Forms.py وفقًا للتعليمات الواردة في هذا الجزء من البرنامج التعليمي, ، وقمت بإجراء التعديلات على ملف view.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 هو السطر في view.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 '*'
عند استيراد الدليل الذي يبحث عنه بايثون، يكون الاستيراد هو جذر المشروع ولا توجد وحدة تسمى كنماذج.
لذلك، إذا كنت تريد اختبار إنشاء ملف باسم النماذج في جذر المشروع وسوف يقوم باستيراده.
بهذه الطريقة سوف تنجح بالتأكيد
from contacts.forms import FormClassName # or wildcard '*'