例如:
from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
class MyView(BaseView):
@expose('/')
def index(self):
return self.render('index.html')
app = Flask(__name__)
admin = Admin(app)
admin.add_view(MyView(name='Hello'))
app.run()
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要一个名为"views.py"的新文件,我该如何将视图添加views.py到管理员?我需要使用蓝图吗?
对于我的项目,我实际上制作了一个支持烧瓶管理的Blueprint子类:
from flask import Blueprint
from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin
class AdminBlueprint(Blueprint):
views=None
def __init__(self,*args, **kargs):
self.views = []
return super(AdminBlueprint, self).__init__('admin2', __name__,url_prefix='/admin2',static_folder='static', static_url_path='/static/admin')
def add_view(self, view):
self.views.append(view)
def register(self,app, options, first_registration=False):
admin = Admin(app, name='microblog', template_mode='adminlte')
for v in self.views:
admin.add_view(v)
return super(AdminBlueprint, self).register(app, options, first_registration)
Run Code Online (Sandbox Code Playgroud)
有关详细信息,您可以在此处阅读我的博客:http://blog.sadafnoor.me/blog/how-to-add-flask-admin-to-a-blueprint/
我对这个问题很晚了,但无论如何......我的猜测是你想使用应用程序工厂模式并使用 Flask-Admin。关于潜在问题有一个很好的讨论。我使用了一个非常丑陋的解决方案,在init .py 文件中实例化 Flask-Admin :
from flask_admin.contrib.sqla import ModelView
class UserModelView(ModelView):
create_modal = True
edit_modal = True
can_export = True
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
db.init_app(app)
# import models here because otherwise it will throw errors
from models import User, Sector, Article
admin.init_app(app)
admin.add_view(UserModelView(User, db.session))
# attach blueprints
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')
return app
Run Code Online (Sandbox Code Playgroud)
您不需要为此的蓝图。在views.py增加进口的admin,你在你的主要项目中定义的对象:
from projectmodule import admin
from flask.ext.admin import BaseView, expose
class MyView(BaseView):
@expose('/')
def index(self):
return self.render('index.html')
admin.add_view(MyView(name='Hello'))
Run Code Online (Sandbox Code Playgroud)
并在您的主projectmodule文件中使用:
from flask import Flask
from flask.ext.admin import Admin
app = Flask(__name__)
admin = Admin(app)
# import the views
import views
app.run()
Run Code Online (Sandbox Code Playgroud)
例如,您import views 在设置的行之后添加admin = Admin(app)。
| 归档时间: |
|
| 查看次数: |
5086 次 |
| 最近记录: |