Django Python - ошибка импорта: Нет модуля с именем 'views'
Я пытаюсь запустить веб-сервер на Django, используя эту серию учебников: https://www.youtube.com/watch?v=Rpi0Ne1nMdk&list=PLPSM8rIid1a3TkwEmHyDALNuHhqiUiU5A
Я получаю ошибку, когда пытаюсь импортировать скрипт 'landing.views' внутри urls.py, вот ошибка полностью:
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner
self.run()
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\commands\runserver.py", line 110, in inner_run
autoreload.raise_last_exception()
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 87, in raise_last_exception
raise _exception[1]
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\__init__.py", line 375, in execute
autoreload.check_errors(django.setup)()
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\apps\registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\apps\config.py", line 224, in create
import_module(entry)
File "C:\Users\trevo\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'views'
Вот код, который генерирует ошибку, показанную выше в urls.py:
from django.urls import path
from landing.views import Index
urlpatterns = [
path('', Index.as_view(), name='index'),
]
Я также пробовал просматривать сообщения, созданные другими пользователями, такие как: ImportError: cannot import name 'Index' from 'landing.views', Django error in urlpatterns: No module named views, Cannot import name views, однако, первая ссылка в настоящее время не отвечает, а последние несколько не очень связаны с кодом, который я сейчас использую. Я также пробовал другие методы, такие как использование
sys.path.insert(1, 'C:/Users/trevo/OneDrive/Desktop/VegaAiTest/ChattingPlatform/src/VegaPlatform/landing/urls.py')
и sys.path.append("C:/Users/trevo/OneDrive/Desktop/VegaAiTest/ChattingPlatform/src/VegaPlatform/landing/urls.py")
, а также использование команды SET PYTHONPATH=
в моем приложении powershell. Что именно я делаю неправильно, что может вызывать эти ошибки? Любая помощь будет очень признательна, спасибо!
Переместите views.py
из каталога проекта в каталог приложения. Если вы не понимаете разницы, покажите мне вывод ls -laR
.
Вы переименовали сайт из landing
во что-то другое? Обновите from landing.views import Index
, если это так.
Проблема в том, что когда вы оставляете путь пустым, оставляя одинарные кавычки без пути, Django будет искать представления в каталоге проекта.
Также, в urlpatterns
, вы всегда должны префиксировать путь представления с views.
таким views.index
Итак, чтобы исправить, есть следующие способы:
Решение 1
import landing.views urlpatterns = [ path('', landing.views.Index.as_view(), name='index'), ]
Решение 2
from landing.views import Index urlpatterns = [ path('index/', views.Index.as_view(),name='index'), ]
Решение 3: Внутри посадочного приложения создайте
urls.py
добавлениеfrom views import Index urlpatterns = [ path('index/', views.Index.as_view(),name='index') ]
и в project/urls.py
добавить
from django.urls import include, path
urlpatterns = [
path('landing/', include('landing.urls') ),
]