Ошибка ModuleNotFoundError в django для python
При выполнении моего кода я получаю следующую ошибку:
File "C:\Users\emanull\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'current_datetime'
Мой файл views.py:
from django.shortcuts import render
from django.http import HttpResponse
from datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
Мой файл urls.py:
from django.contrib import admin
from django.urls import include, path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('time/', include('views.current_datetime'))
]
У вас ошибка в файле views.py. from datetime
неправильно, поскольку вы не импортируете ничего из пакета datetime.
Правильное использование в вашем случае было бы import datetime
.
Вторая ошибка заключается в том, как вы используете URL-адреса. Это должно быть:
from django.contrib import admin
from django.urls import include, path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('time/', views.current_datetime, name='current-datetime'),
]
Для дальнейшего чтения смотрите документацию Django для URLs.
Мой файл views.py:
from django.shortcuts import render
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
Мой файл urls.py:
from django.contrib import admin
from django.urls import include, path
from gogle import views
urlpatterns = [
path('admin/', admin.site.urls),
path('time/', views.current_datetime)
]
В своем
views.py
вы можете либо:from datetime import datetime
и использоватьdatetime.now()
или
import datetime
и использоватьdatetime.datetime.now()
В вашем
.urls.py
используйте абсолютный импорт вместе с правильным синтаксисом согласно docs (include ожидает локальныйurls.py
а не представление).
Когда Django встречает include(), он отрезает любую часть URL, которая соответствует этому моменту, и отправляет оставшуюся строку. URL до этого момента и отправляет оставшуюся строку в включенный URLconf для дальнейшей обработки.
Две вещи, которые вам нужно сделать.
исправьте следующую строку в вашем коде импорта, замените
from datetime
наimport datetime
убедитесь, что у вас есть пустой файл init.py, расположенный в той же папке, где находится views.py, и затем вы можете сделать как показано ниже
.
from . import views urlpatterns = [ path('time/', include('views.current_datetime')) ]
Надеюсь, это решит вашу проблему.