#python #flask
#python #flask
Вопрос:
Я новичок в Python, и у меня было много проблем с настройкой структуры моих приложений с помощью __init__.py
даже после поиска по нескольким руководствам.
На данный момент моя текущая структура каталогов выглядит следующим образом
/parent
/myapp
__init__.py
views.py
/virtualenv
Ранее у меня было (если это имеет какое-либо значение)
/parent
/myapp
/bin
/include
/lib
Содержимое __init__.py
приведено ниже:
from flask import Flask
app = Flask(__name__)
и мой views.py
from myapp import app
@app.route('/')
def test():
return 'This is a new test'
if __name__ == '__main__':
app.run(debug=True)
Если myapp
инициализируется с помощью init-файла, почему я не могу вызвать его в представлениях? Я получаю сообщение об ошибке «Я не могу импортировать приложение, и у меня нет модуля с именем myapp». Если я удалю файл инициализации и скопирую содержимое в верхнюю часть views.py файл, все работает нормально.
Комментарии:
1. возможно, вы также захотите рассмотреть возможность использования шаблона «фабрика приложений» для того, что вы пытаетесь сделать. у fbone есть отличный пример этого. Если вы хотите чего-то попроще, вот что я обычно использую. github.com/DarkCrowz/innovation_center/blob/master /…
2. @corvid ссылка DarkCrowz недоступна, вы можете найти и обновить ее?
Ответ №1:
Вы используете views
в качестве основного скрипта. Вы не можете поместить скрипт внутрь пакета; каталог, в котором он находится, не может рассматриваться как таковой. Python добавляет parent/myapp
каталог к пути Python, а не к parent
пути.
Добавьте отдельный скрипт на верхнем уровне (рядом с myapp
):
from myapp import app
if __name__ == '__main__':
app.run(debug=True)
и добавьте импорт в __init__.py
, чтобы импортировать ваши представления:
from flask import Flask
app = Flask(__name__)
import views
и удалите if __name__ == '__main__':
блок из views.py
.