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') ),
    ]
          
Вернуться на верх