如何从python Flask中的主页面(index.html)链接到使用Flask-admin的admin部分?

时间:2016-05-07 14:04:41

标签: flask flask-admin

我在第一个项目中使用了烧瓶。从站点主页面添加管理部分的链接需要什么方法?

2 个答案:

答案 0 :(得分:2)

default URL route是/ admin。您还可以使用url_for('admin.index')获取默认路由。

请注意,每个Flask应用程序可以拥有更多的flask-admin实例。请参阅下面的自包含代码段,说明了这一点。

from flask import Flask, url_for, render_template_string
from flask_admin import Admin

app = Flask(__name__)

default_admin = Admin()
default_admin.init_app(app)

admin_1 = Admin(endpoint="another", url="/another")
admin_1.init_app(app)

admin_2 = Admin(endpoint="this_is_a_long_endpoint", url="/this_is_a_long_url")
admin_2.init_app(app)

admin_3 = Admin(endpoint="test", url="/test/test")
admin_3.init_app(app)

# admin_exception_1 = Admin()
# admin_exception_1.init_app(app)
# This has the same endpoint as default_admin - not allowed
# Cannot have two Admin() instances with same endpoint name.

# admin_exception_2 = Admin(endpoint="admin1", url="/admin")
# admin_exception_2.init_app(app)
# This has the same url as default_admin - not allowed
# Cannot assign two Admin() instances with same URL and subdomain to the same application.

index_template = """
    <table>
        <thead>
            <tr>
                <th>URL</th>
                <th>Endpoint</th>
            </tr>
        </thead>
    <tbody>
        {% for link in links %}
            <tr>
              <td>{{ link.url }}</td>
              <td>{{ link.endpoint }}</td>
            </tr>
        {% endfor %}
    </tbody>
    </table>
"""


@app.route('/')
def index():
    _links = []
    _endpoints = ['admin.index', 'another.index', 'this_is_a_long_endpoint.index', 'test.index']
    for _endpoint in _endpoints:
        _links.append(
            {
                'url': url_for(_endpoint),
                'endpoint': _endpoint
            }
        )
    return render_template_string(index_template, links=_links)


if __name__ == '__main__':
    app.run(port=7000, debug=True)

示例输出

Flask-Admin urls and endpoints

答案 1 :(得分:0)

如果您询问如何保护此链接,则取决于您处理用户帐户的方式。我通常使用Flask-Login和用户模型上的方法执行此操作,如果用户是管理员,则返回True,请参阅此代码段:

{% if current_user.is_admin() %}
 <a href="/admin" style="color:red">Admin</a>
{% endif %}

Flask-Login传递给模板的current_user。