Flask-admin - ModelView中同一列的多种格式

时间:2016-06-10 01:10:27

标签: python flask flask-admin

我正在尝试修改此Flask-admin示例代码http://examples.flask-admin.org/forms/admin/image/,以将图像的缩略图和文件路径的原始文本显示为两个单独的列。这基本上是我试图在我自己的项目中解决的问题。我可以只显示其中一个,但不能同时显示两个。

示例源代码中的相关类是:

class ImageView(sqla.ModelView):
    def _list_thumbnail(view, context, model, name):
        if not model.path:
            return ''

        return Markup('<img src="%s">' % url_for('static',                                                 filename=form.thumbgen_filename(model.path)))

    column_formatters = {
        'path': _list_thumbnail
    }

我的问题是ModelView类包含要通过在SQAlchemy模型中引用它们的名称来显示的列(例如'name'或'path')。如果我希望它同时包含路径和缩略图,那么我需要将列'路径'包括两次。但是,我不能将不同的格式化程序函数应用于每个“路径”列。所以我只能有两个缩略图列或两个文本路径列。

我试图通过用column_labels不同地标记两个“路径”列来欺骗它,但这是一个字典对象而不是列表,所以再次你不能区分这两个。

(完全来源:https://github.com/flask-admin/flask-admin/blob/master/examples/forms/app.py

1 个答案:

答案 0 :(得分:1)

你很亲密。在视图的column_list属性中定义“虚拟”列,通过column_label属性为其提供一个漂亮的标签,现在您可以使用column_formatters属性中的“虚拟”列。

例如:

class ImageView(sqla.ModelView):

    # Add all your visible columns here include a "dummy" column - in this instance 'raw_path'
    column_list = ('path', 'raw_path')

    # Define label for dummy column
    column_labels = {
        'raw_path': 'Full Path'     
    }

    def _list_thumbnail(view, context, model, name):
        if not model.path:
            return ''
        return Markup('<img src="%s">' % url_for('static', filename=form.thumbgen_filename(model.path)))

    def _list_raw_path(view, context, model, name):
        if not model.path:
            return ''
        return Markup('<p>{path}</p>'.format(path=model.path))


    column_formatters = {
        'path': _list_thumbnail
        'raw_path': _list_raw_path
    }