我有一个简单的模型调用,我正在使用Flask-Admin创建/编辑/删除此模型的实例。
Call的一个字段是音频文件的路径。我希望能够通过添加一些HTML代码在管理员中播放该文件。我检查了模板flask_admin/templates/bootstrap3/admin/model/list.html
,似乎唯一可行的方法是在行的末尾添加一个单元格,这意味着扩展list.html,复制整个块list_row
和添加我的细胞。
这是唯一的方法吗?或者有没有办法在我的音频播放器(基本上是html5)中添加一个“假”字段到表单?
flask_admin /模板/ bootstrap3 /管理/模型/ list.html
....
{% for c, name in list_columns %}
<td class="col-{{c}}">
{% if admin_view.is_editable(c) %}
{% if form.csrf_token %}
{{ form[c](pk=get_pk_value(row), value=get_value(row, c), csrf=form.csrf_token._value()) }}
{% else %}
{{ form[c](pk=get_pk_value(row), value=get_value(row, c)) }}
{% endif %}
{% else %}
{{ get_value(row, c) }}
{% endif %}
</td>
{% endfor %}
<td>ADD MY CUSTOM CELL HERE?</td>
....
models.py
class Call(db.Model):
__tablename__ = 'calls'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
path = db.Column(db.Unicode(128))
def __unicode__(self):
return self.name
答案 0 :(得分:7)
from flask import Markup
class CallView(sqla.ModelView):
def _mp3_formatter(view, context, model, name):
return Markup('<a href="{}">{}</a>'.format(url_for('path_to_mp3_view', filename=model.path), model.name)
column_formatters = {
'path': _mp3_formatter
}
或者您甚至可以传递Jinja2宏(必须存在于覆盖模板中):
class CallView(sqla.ModelView):
column_formatters = dict(path=macro('render_path_mp3'))
在模板中:
{% macro render_path_mp3(model, column) %}
<a href="{{ url_for('path_to_mp3_view', filename=model.path) }}">{{ model.name }}</a>
{% endmacro %}
创建自定义视图函数path_to_mp3_view
已被省略为练习..;)
答案 1 :(得分:0)
这是一个旧帖子,但为了将来参考,现在有column_extra_row_actions
和BaseListRowAction
。更多信息:
http://flask-admin.readthedocs.io/en/latest/api/mod_model/