更改 link "create" 按钮的位置 flask-admin
Change link location of "create" button flask-admin
我有这个 flask 管理界面,但是我想改变 Create
link 的行为,所以我可以 link 到我自己的创建界面而不是让 flask 管理为我制作一个创建表格。还可以在 With Selected
旁边添加另一个 link,重定向到另一个页面。这是复杂的几何数据,所以我需要一个完全不同的数据创建界面,Products
只是一个例子。
我真的不想添加另一个管理模板,所以如果可以在 python 中完成就好了。
经过一段时间的尝试,我找到了这个解决方案,它完全符合我的要求:
from flask_admin import Admin
from flask_sqlalchemy import SQLAlchemy
from flask_admin.contrib.sqla import ModelView
from flask import Flask, url_for, redirect
app = Flask(__name__)
db = SQLAlchemy(app)
admin = Admin(app)
class Product(db.Model):
__tablename__ = 'product'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
db.create_all()
class SuperHackyFlaskAdminRedirectFakeException(Exception):
pass
@app.errorhandler(SuperHackyFlaskAdminRedirectFakeException)
def handle_fake_errors(error):
return redirect(url_for('index'))
@app.route('/index')
def index():
return 'this is the index'
class ProductView(ModelView):
column_display_pk = True
def redirect_to_index_from_admin(_):
raise SuperHackyFlaskAdminRedirectFakeException()
create_form = redirect_to_index_from_admin
admin.add_view(ProductView(Product, db.session))
如您所见,它确实很老套,我希望找到更好的解决方案。
有什么建议吗?
覆盖 ProductView
的 create_view
方法。
class ProductView(ModelView):
column_display_pk = True
@expose('/new/', methods=('GET', 'POST'))
def create_view(self):
# render your view here
return "Hello World"
我有这个 flask 管理界面,但是我想改变 Create
link 的行为,所以我可以 link 到我自己的创建界面而不是让 flask 管理为我制作一个创建表格。还可以在 With Selected
旁边添加另一个 link,重定向到另一个页面。这是复杂的几何数据,所以我需要一个完全不同的数据创建界面,Products
只是一个例子。
我真的不想添加另一个管理模板,所以如果可以在 python 中完成就好了。
经过一段时间的尝试,我找到了这个解决方案,它完全符合我的要求:
from flask_admin import Admin
from flask_sqlalchemy import SQLAlchemy
from flask_admin.contrib.sqla import ModelView
from flask import Flask, url_for, redirect
app = Flask(__name__)
db = SQLAlchemy(app)
admin = Admin(app)
class Product(db.Model):
__tablename__ = 'product'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
db.create_all()
class SuperHackyFlaskAdminRedirectFakeException(Exception):
pass
@app.errorhandler(SuperHackyFlaskAdminRedirectFakeException)
def handle_fake_errors(error):
return redirect(url_for('index'))
@app.route('/index')
def index():
return 'this is the index'
class ProductView(ModelView):
column_display_pk = True
def redirect_to_index_from_admin(_):
raise SuperHackyFlaskAdminRedirectFakeException()
create_form = redirect_to_index_from_admin
admin.add_view(ProductView(Product, db.session))
如您所见,它确实很老套,我希望找到更好的解决方案。
有什么建议吗?
覆盖 ProductView
的 create_view
方法。
class ProductView(ModelView):
column_display_pk = True
@expose('/new/', methods=('GET', 'POST'))
def create_view(self):
# render your view here
return "Hello World"