我尝试在管理页面中的某个ModelView上加载脚本:
class CustomView(ModelView):
# Neither approach works here:
# with current_app.app_context(), current_app.test_request_context():
extra_js = [url_for('static', filename='admin/admin.js')]
注释掉app_context()
后,我收到此错误:
RuntimeError:尝试在没有应用程序的情况下生成URL 上下文被推动。这必须在应用程序上下文时执行 是可用的。
取消注释app_context会给我这个错误:
RuntimeError:在应用程序上下文之外工作。这通常 表示您尝试使用需要连接的功能 以某种方式使用当前的应用程序对象。要解决这个问题,请设置 app.app_context()的应用程序上下文。请参阅文档 了解更多信息。
我在设置管理员视图时也尝试添加上下文,但得到相同的错误:
# ADMIN
with app.app_context():
admin = Admin(app, name='Custom', template_mode='bootstrap3', index_view=MyIndex(), base_template='admin/base.html')
admin.add_view(CustomView(User, db.session))
那么,如何适当地传递应用程序上下文以加载此视图的脚本?
答案 0 :(得分:1)
我找到了一个解决方案,不确定是否能完美满足您的需求,但是只要我通过谷歌搜索我的问题对这个话题感到满意,希望对大家有帮助。
因此,为了在烧瓶管理 extra_js 属性中提供 url_for ,我在类中定义了我的 extra_js 属性,该属性实现了通过覆盖render方法来实现flask admin的ModelView基类。该代码段等于数千个单词:
class MyModelView(AdminModelView):
def render(self, template, **kwargs):
"""
using extra js in render method allow use
url_for that itself requires an app context
"""
self.extra_js = [url_for("static", filename="js/whatever.js")]
return super(MyModelView, self).render(template, **kwargs)
希望这会有所帮助!