2015-10-24 3 views
1

Я хочу настроить базовый интерфейс администратора, используя flask-admin, и я хочу, чтобы все это было в чертеже. Вот минимальная версия мой код:Использование flask-admin с чертежами в колбе

#app.py 
from flask import Flask 
from bp import bp 

app = Flask(__name__) 
app.register_blueprint(bp) 

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


#bp.py 
from flask import Blueprint, current_app 
from flask_admin import Admin 
from flask_admin.contrib.pymongo import ModelView 
import pymongo 

conn = pymongo.MongoClient() 
bp = Blueprint('bp', __name__, 
       template_folder='templates') 

admin = Admin(current_app) 
admin.add_view(ModelView(conn.my_db.my_collection)) 

При запуске python app.py, он падает с RuntimeError: working outside of application context, потому что admin никоим образом не зацепил (или что слово используется для описания того), чтобы bp. Обычно, можно было бы написать

@bp.route('/<page>') 
def show(page): 
    pass 

Но я не могу найти правильный декоратор в контексте создания Admin объекта. Одна вещь, которую я пробовал, - сделать admin = Admin() в bp.py, импорт admin в app.py, а затем admin.app = app в app.py. Это работает, но мне кажется, что я разделяю логику в нескольких файлах, поэтому мне это не очень удобно. Каков питонический способ справиться с этой ситуацией?

ответ

1

Вам нужен фактический объект приложения, чтобы запустить класс администрирования Flask. Current_app не будет работать. Этот вызов следует разместить на app.py. Затем на чертеже вы можете использовать

from app import admin

 Смежные вопросы

  • Нет связанных вопросов^_^