目前,我使用以下代码在 Flask-Admin 项目的菜单栏上显示登录和注销链接:
admin.add_link(MenuLink(name='Logout', category='', url="/logout"))
admin.add_link(MenuLink(name='Login', category='', url="/login"))
Run Code Online (Sandbox Code Playgroud)
但是,无论当前用户是否登录,这都会显示两者。是否可以让它在登录时显示注销并在注销时显示?
查看 Flask-Admin (layout.html) 中的菜单模板定义:
{% macro menu_links(links=None) %}
{% if links is none %}{% set links = admin_view.admin.menu_links() %}{% endif %}
{% for item in links %}
{% if item.is_accessible() and item.is_visible() %}
<li>
<a href="{{ item.get_url() }}">{{ menu_icon(item) }}{{ item.name }}</a>
</li>
{% endif %}
{% endfor %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
注意{% if item.is_accessible() and item.is_visible() %}线路。创建继承的MenuLink类并覆盖is_accessible()or is_visible()。
示例(未经测试):
from flask_security import current_user
from flask_admin.menu import MenuLink
class LoginMenuLink(MenuLink):
def is_accessible(self):
return not current_user.is_authenticated
class LogoutMenuLink(MenuLink):
def is_accessible(self):
return current_user.is_authenticated
admin.add_link(LogoutMenuLink(name='Logout', category='', url="/logout"))
admin.add_link(LoginMenuLink(name='Login', category='', url="/login"))
Run Code Online (Sandbox Code Playgroud)