Я получаю NameError: name 'i_statement_bp' is not defined
при попытке зарегистрировать проект с именем i_statement_bp
в приложении в ABC / app / __init__.py
.
У меня есть Flask app
с Blueprints
со следующей структурой:
ABC/
|- run.py
|- app/
|--__init__.py
|
|--i_statement/
| |--__init__.py
| |
| |--templates/
| | |--i_statement.html
| |
| |--i_statement.py
|
|--blog/
|
|--static/
|
|--images/
|--css/
|--js/
|--fonts/
Мой ABC/app/__init__.py
выглядит следующим образом:
import flask from Flask, Blueprint
class MyApp(Flask):
def __init__(self):
Flask.__init__(self, __name__)
self.jinja_loader=jinja2.ChoiceLoader([self.jinja_loader,
jinja2.PrefixLoader({}, delimiter = ".")])
def create_global_jinja_loader(self):
return self.jinja_loader
def register_blueprint(self, bp):
Flask.register_blueprint(self, bp)
self.jinja_loader.loaders[1].mapping[bp.name] = bp.jinja_loader
app=MyApp()
app.register_blueprint(i_statement_bp) **<== this line of code is causing error per debugger**
from app.i_statement import i_statement_bp
__init__.py
файл в папке `i_statement 'пуст, просто чтобы указать, что это пакет для Python.
Файл с именем i_statement.py
выглядит следующим образом:
from flask import Blueprint, request, jsonify, session
i_statement_bp=Blueprint('i_statement_bp',__name__,
url_prefix='/i_statement',template_folder="templates")
@i_statement_bp.route('/i_statement',methods=['GET','POST'])
def i_statement():
some logic here
return render_template('i_statement.html',variable=variable)
В качестве дополнительной информации, причиной для класса MyApp является желание иметь папку шаблонов в папке чертежей, в отличие от обычного подхода, когда папка шаблонов находится в папке приложения.
Файл ABC/run.py
выглядит следующим образом:
from app import app
app.secret_key=flask_secret_key
app.run(debug=debug)
Обновление:
В соответствии с предложением в комментариях я изменил строки в ABC/app/__init__.py
следующим образом:
from app.i_statement import i_statement_bp
app.register_blueprint(i_statement_bp)
Эта схема выдает новый тип ошибки:
from app import app
File "C:\ABC\app\__init__.py", line 55, in <module>
from app.i_statement import i_statement_bp
ImportError: cannot import name 'i_statement_bp' from 'app.i_statement'