flask - 烧瓶管理员:extra_js 和 url_for
问题描述
我正在尝试在我的管理页面中的某个 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))
那么,我怎样才能适当地传递应用程序上下文来加载我的脚本用于这个视图呢?
解决方案
我找到了一个解决方案,我不确定它是否能完美地满足您的需求,但只要我通过谷歌搜索我的问题来感受这个主题,我希望这可以帮助到其他人。
因此,为了使url_for在flask admin extra_js属性中可用,我刚刚在我的类中定义了我的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)
希望这可以帮助 !
推荐阅读
- ruby-on-rails - Capistrano rails deploy 升级到 rails 5.1.5 失败,仍将当前设置为失败部署
- sql-server - 如何在以前的时间点恢复 SQL Server 数据库
- react-native - 如何从 React Native 中的 SQL 提取中获取一个字段?
- javascript - 将多个对象归为一个
- vb.net - VB替换附加csv中的字符
- xml - 如何在 VB.NET 中反序列化
- python - 如何通过处理连续换行符等情况来读取csv文件?
- docker - Nmake 无法在 docker mount 中找到文件
- android - 如何调整约束布局以滚动视图以适应所有屏幕?
- .htaccess - 由于 .htaccess,我的 CSS #id 无法正常工作