Я создал отдельный модуль (sources.py) в моем проекте django, чтобы содержать функции и не допустить превращения моего модуля views в полный кошмар.
Когда я импортирую sources.py в views.py, вызываю функцию, которую он содержит, и запускаю код с оператором print, чтобы убедиться, что вызываемый объект точно импортируется, все работает нормально, и я вижу напечатанное, что я ожидаю ,
Однако, когда я пытаюсь запустить приложение на локальном сервере, я получаю ModuleNotFoundError.
Если я включаю код из функции в представления, а затем запускаю локальный сервер, все работает просто отлично.
Модуль явно импортируется, иначе оператор print не будет работать. Однако что-то теряется при попытке запуска на локальном сервере.
Я прошел через тонну вопросов о стековом потоке, учебных пособий по модулям python и django, а также вопросов, расположенных в других местах, и кажется, что ничего не решило проблему. Ниже весь код.
sources.py и views.py находятся в одном каталоге. (BetrTV / betrTV_app / file.py)
Я также пытался "import sources *
с original = sources.video()
, который вызвал ту же проблему, что и import . sources
from django.shortcuts import render
from django.http import HttpResponse
from datetime import date
from sources import video
''' returns a dict of unique video identifiers (last 11 chars)'''
original = video()
print(original)
sources = []
# strip out all except the unique source code
for i in range(len(original)):
source = original[i]
source = source[30:]
sources.append(source)
# Checked out... print(sources)
# create day of week to pull video
day = date.today()
num = str(day)[9]
# pull source from list by using 'num' from 'day'
source = sources[int(num)]
def index(request):
''' The home page for betrTV_app '''
video = 'class="video-frame" width="1200" height="600"\
+ src="https://www.youtube.com/embed/%s"\
+ frameborder="0" allow="accelerometer; autoplay; encrypted-media; \
+ gyroscope; picture-in-picture" allowfullscreen' %source
html = '<html><body><link href="https://fonts.googleapis.com/css?family=Gugi"\
+ rel="stylesheet"><h1 style="color: grey; font-family: Gugi; font-size: \
+ 20px;">BetrTV... Empowerment on Demand</h1>\
<iframe %s></iframe></body></html>' %video
return HttpResponse(html)
INSTALLED_APPS = [
...
# My Apps
'betrTV_app',
]
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\Prometheus\Dropbox\LVL6\Programming\Python\betrTV\betrTV\urls.py", line 21, in <module>
path('', include('betrTV_app.urls')),
File "C:\Users\Prometheus\Envs\betr_env\lib\site-packages\django\urls\conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "C:\Users\Prometheus\Envs\betr_env\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\Prometheus\Dropbox\LVL6\Programming\Python\betrTV\betrTV_app\urls.py", line 4, in <module>
from . import views
File "C:\Users\Prometheus\Dropbox\LVL6\Programming\Python\betrTV\betrTV_app\views.py", line 4, in <module>
from sources import video
ModuleNotFoundError: No module named 'sources'