【问题标题】:Flask-Admin link back to main siteFlask-Admin 链接回主站点
【发布时间】:2015-12-13 05:58:49
【问题描述】:

有什么方法可以修改flask-admin管理顶部面板上的主页按钮url链接,以便我重定向回主站点?

我可以在 custom.html 页面中添加一个链接,例如:

{% extends 'admin/master.html' %}
{% block body %}
    <a href="{{ url_for('main.home') }}">Home</a>
{% endblock %}

但这隐藏在自定义页面中。我更喜欢管理员之外的顶栏链接。

【问题讨论】:

    标签: html flask


    【解决方案1】:

    最简单的方法是添加一个菜单链接并保留管理主页(您将来可能想要添加仪表板或类似的东西):

    from flask_admin.menu import MenuLink
    
    # Create admin
    admin = Admin(app, name='Admin', url='/')
    admin.add_view(ImageView(model=Image, session=db.session, category='Database', name='Images'))
    # Add custom link to public website home page
    admin.add_link(MenuLink(name='Public Website', category='', url=url_for('main.home')))
    

    注意,url_for 需要在 Flask 应用程序上下文中调用。例如,如果使用 Flask 应用程序工厂模式,则如下所示:

    def create_app(config):
    
        app = App('app')
    
        #  setup config
    
        #  setup blueprints 
    
        #  setup Flask-Admin
    
        from app.admin import create_admin
        from app.admin.configure import configure_admin
        with app.app_context():
            admin = create_admin(app=app)
            configure_admin(app, admin)
    
        #  more stuff
    
       return app
    

    __init__.py 在 app.admin 模块中

    def create_admin(app=None):
        return Admin(app, template_mode='bootstrap3')
    

    configure.py 在 app.admin 模块中

    def configure_admin(app, admin):
    
        # setup views
    
        # add link to home page
    
        admin.add_link(MenuLink(name='Public Website', category='', url=url_for('home.HomeView:index')))
    

    【讨论】:

    • MenuLink 现在导入为from flask_admin.menu import MenuLink
    • 我需要使用with app.test_request_context(): admin.add_link(MenuLink(name='Public Website' category='', url=url_for('index'))) 才能让它工作
    • @alex_lewis - 谢谢,添加了关于在 Flask 应用程序上下文中调用的注释。
    【解决方案2】:

    您可以覆盖MenuLinkget_url 方法。这样您就可以解决应用程序上下文问题。

    from flask import url_for
    from flask_admin import Admin
    from flask_admin.menu import MenuLink
    
    class MainIndexLink(MenuLink):
        def get_url(self):
            return url_for("main.index")
    
    
    admin = Admin(name="Admin")
    admin.add_link(MainIndexLink(name="Main Page"))
    
    def create_app():
        app = Flask(__name__)
    
        from app.admin import admin
        admin.init_app(app)
    
       return app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2017-11-12
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多