python flask ImportError: нет модуля с именем views.login

У меня есть приложение с именем flaskr. Когда я хочу импортировать views.login` из представлений. это дает мне ошибку:

   File "C:\Projects\flaskr\flaskr.py", line 28, in <module>
     from flaskr.views.login import login
ImportError: No module named views.login

Прежде чем я поместил все методы в файл flaskr.py. Я хочу переместить каждую функцию в разные представления, такие как вход в систему, show_entries, log_out, точно так же, как MVC имеет разные представления.

flaskr.py

from sqlite3 import dbapi2 as sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
import os

app = Flask(__name__)
app.config.from_object(__name__)

from flaskr.views.login import login
app.register_blueprint(login)

if __name__ == '__main__':
    app.run(debug = True)

логин.py

from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from jinja2 import TemplateNotFound

login = Blueprint('login', __name__,template_folder='../template')

@app.route('/login')
def login():
    return render_template('login.html')

person user1323328    schedule 28.07.2014    source источник
comment
У вас правильно настроены папки как модули? Вам нужно __init__.py файлов в папках модуля для импорта. У вас также будет проблема в login.py. Вам нужно изменить имя папки чертежей login или функции login на что-то другое.   -  person Eric Workman    schedule 28.07.2014
comment
нам нужна ваша структура каталогов и файлы тоже? вы можете попробовать создать пустой файл __init__.py в каждом каталоге, где он используется в качестве модулей   -  person Nava    schedule 29.07.2014


Ответы (1)


Создайте папку с именем app или что-то еще. Создайте __init__.py файл в приложении:

from sqlite3 import dbapi2 as sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
import os

app = Flask(__name__)
app.config.from_object(__name__)

from app import views

app.register_blueprint(views.login)

Переместите метод app.run в отдельный файл start.py в корневом каталоге.

from app import app

if __name__ == '__main__':
    app.run(debug = True)

Создайте представления папок в app/. Создайте __init__.py в представлениях Теперь у вас может быть такая структура:

your_project_name/
    |app/
    |__init__.py            
        |views/
            |__init__.py
            |login.py
    start.py

Извините, если есть ошибки.

person cyberra    schedule 30.07.2014
comment
Кстати, это типичная структура папок приложения Flask. - person cyberra; 31.07.2014