自定义烧瓶管理行操作
Customizing the flask admin row actions
我想在 Flask 管理模板中添加另一个带有删除和编辑图标的按钮,并希望将某些路由的行数据作为 post 请求发送。我知道我必须在 admin/model/list.html 模板中进行编辑。但我不知道如何添加此功能。
请帮忙。
提前致谢。
您需要为视图定义自定义操作按钮。 Flask-Admin 教程中未描述此过程,但在 API description.
中提到
POST方法
如果您需要为 POST 方法创建一个按钮,您应该像这样 delete_row 操作实现一个 jinja2 宏。它可能看起来像这样(我将文件命名为“custom_row_actions.html”):
{% macro copy_row(action, row_id, row) %}
<form class="icon" method="POST" action="{{ get_url('.copy_view') }}">
<input type="hidden" name="row_id" value="{{ get_pk_value(row) }}"/>
<button type="submit" title="{{ _gettext('Copy record') }}">
<span class="glyphicon glyphicon-copy"></span>
</button>
</form>
{% endmacro %}
然后您为您的记录列表创建一个模板并在其中导入宏库(我将其命名为“my_list.html”):
{% extends 'admin/model/list.html' %}
{% import 'custom_row_actions.html' as custom_row_actions with context %}
之后,您必须对视图进行一些更改:
from flask_admin import expose
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.model.template import TemplateLinkRowAction
class MyView(ModelView):
list_template = "my_list.html" # Override the default template
column_extra_row_actions = [ # Add a new action button
TemplateLinkRowAction("custom_row_actions.copy_row", "Copy Record"),
]
@expose("/copy", methods=("POST",))
def copy_view(self):
"""The method you need to call"""
GET 方法
为 GET 方法创建按钮要简单得多。您不需要覆盖模板,只需向您的视图添加一个操作:
from flask_admin import expose
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.model.template import EndpointLinkRowAction
class MyView(ModelView):
column_extra_row_actions = [ # Add a new action button
EndpointLinkRowAction("glyphicon glyphicon-copy", ".copy_view"),
]
@expose("/copy", methods=("GET",))
def copy_view(self):
"""The method you need to call"""
字形
Glyphicons 是与 Flask-Admin 使用的 Bootstrap v3 库捆绑在一起的图标库。如果您在 Flask-Admin 初始化时选择此 Bootstrap 版本,则可以使用它:
from flask_admin import Admin
admin = Admin(template_mode="bootstrap3")
您可以查看 Bootsrap v3 documentation 中可用的图标。
我想在 Flask 管理模板中添加另一个带有删除和编辑图标的按钮,并希望将某些路由的行数据作为 post 请求发送。我知道我必须在 admin/model/list.html 模板中进行编辑。但我不知道如何添加此功能。 请帮忙。 提前致谢。
您需要为视图定义自定义操作按钮。 Flask-Admin 教程中未描述此过程,但在 API description.
中提到POST方法
如果您需要为 POST 方法创建一个按钮,您应该像这样 delete_row 操作实现一个 jinja2 宏。它可能看起来像这样(我将文件命名为“custom_row_actions.html”):
{% macro copy_row(action, row_id, row) %}
<form class="icon" method="POST" action="{{ get_url('.copy_view') }}">
<input type="hidden" name="row_id" value="{{ get_pk_value(row) }}"/>
<button type="submit" title="{{ _gettext('Copy record') }}">
<span class="glyphicon glyphicon-copy"></span>
</button>
</form>
{% endmacro %}
然后您为您的记录列表创建一个模板并在其中导入宏库(我将其命名为“my_list.html”):
{% extends 'admin/model/list.html' %}
{% import 'custom_row_actions.html' as custom_row_actions with context %}
之后,您必须对视图进行一些更改:
from flask_admin import expose
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.model.template import TemplateLinkRowAction
class MyView(ModelView):
list_template = "my_list.html" # Override the default template
column_extra_row_actions = [ # Add a new action button
TemplateLinkRowAction("custom_row_actions.copy_row", "Copy Record"),
]
@expose("/copy", methods=("POST",))
def copy_view(self):
"""The method you need to call"""
GET 方法
为 GET 方法创建按钮要简单得多。您不需要覆盖模板,只需向您的视图添加一个操作:
from flask_admin import expose
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.model.template import EndpointLinkRowAction
class MyView(ModelView):
column_extra_row_actions = [ # Add a new action button
EndpointLinkRowAction("glyphicon glyphicon-copy", ".copy_view"),
]
@expose("/copy", methods=("GET",))
def copy_view(self):
"""The method you need to call"""
字形
Glyphicons 是与 Flask-Admin 使用的 Bootstrap v3 库捆绑在一起的图标库。如果您在 Flask-Admin 初始化时选择此 Bootstrap 版本,则可以使用它:
from flask_admin import Admin
admin = Admin(template_mode="bootstrap3")
您可以查看 Bootsrap v3 documentation 中可用的图标。