Я пытаюсь построить свой первый проект Django. Я создал проект «суперлист» и приложение «списки» внутри. Дерево моего проекта:
pycharm_project_folder
|
superlist
|
lists
superlist
manage.py
...
|
venv
Мои списки/views.py:
from django.shortcuts import render
def home_page():
"""home page"""
pass
Мой суперлист/urls.py
from django.urls import path
from superlist.lists import views
urlpatterns = [
path('/', views.home_page, name='home')
# path('admin/', admin.site.urls),
]
Мои списки/test.py
from django.test import TestCase
from django.urls import resolve
from superlist.lists.views import home_page
class HomePageTest(TestCase):
"""тест домашней страницы"""
def test_root_url_resolves_to_home_page_view(self):
"""корневой url преобразуется в представление домашней страницы"""
found = resolve('/')
self.assertEqual(found.func, home_page)
Итак, когда я бегу
python3 manage.py test
Я понимаю
ModuleNotFoundError: нет модуля с именем «superlist.lists»
Я не понимаю, почему я это получил, потому что пути были предложены PyCharm
Сначала я создал venv из PyCharm в рабочей папке, а затем создал проект django в том же каталоге. Итак, у меня есть папка venv на том же уровне, что и корневая папка проекта Django "superlist".
А с от from lists.views import home_page
?
В Python3 вы захотите использовать относительный импорт, особенно когда у вас дублируются имена пакетов, как здесь. В superlist/urls.py
попробуйте:
from .lists import views
Это предполагает, что файл urls.py — это superlist/urls.py
, а не superlist/superlist/urls.py
. Если верно последнее, то будет:
from .superlist.lists import views
Итак, в конце концов я просто пометил папку superlist как «исходную папку» в PyCharm. Это решило мою проблему
Используете ли вы тот же venv, что и для вашего проекта Pycharm?