代码之家  ›  专栏  ›  技术社区  ›  Sam

flask admin:发生蓝图名称冲突…两者共享同一名称“admin”

  •  1
  • Sam  · 技术社区  · 7 年前

    我有一个烧瓶0.12.4应用程序,正在使用 Flask-Admin .

    我在本地开发时间歇性地得到这个错误,并且刚刚开始在我们的一个公共环境中看到它。

    AssertionError: A blueprint's name collision occurred between 
    <flask.blueprints.Blueprint object at 0x7f5cd31f96d0> and 
    <flask.blueprints.Blueprint object at 0x7f5cd33b0d90>.
    Both share the same name "admin".
    Blueprints that are created on the fly need unique names.
    

    在我的开发环境中复制的步骤有点奇怪:

    1. 中断一些管理配置(例如,在 form_columns 所以它指的是一个不存在的名字)
    2. 刷新浏览器以查看常规的“未知字段”错误
    3. 还原更改
    4. 再次刷新浏览器-然后您会看到上面的蓝图错误

    导致错误的行是:

    # admin.py
    admin = flask_admin.Admin(
        app, index_view=MyIndexView(), template_mode="bootstrap3"
    )
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Sam    7 年前

    似乎问题行被多次调用(尽管它所在的文件只导入到一个位置)。我试图通过一个习俗 endpoint Admin 构造器和继续得到相同的错误,但新的端点名,这表明情况是这样的。

    This answer 指传递给同一个问题,以及使用的解决方案。 init_app 而不是通过 app 给建设者。

    这样,我的代码看起来像这样,错误消失了:

    # admin.py
    # Notice I'm not passing app here any more.
    admin = flask_admin.Admin(index_view=MyIndexView(), template_mode="bootstrap3")
    
    # app.py
    admin.init_app(app) # This line is new
    

    我不知道问题是如何发生的,也不知道为什么会解决这个问题,所以欢迎有更多的建议!

    推荐文章