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

Flask-admin - multiple formats of same column in ModelView

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

示例源码中的相关class为:

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 class 包含要显示的列,通过在 SQAlchemy 模型中按名称引用它们(例如 'name' 或 'path')。如果我希望它同时具有路径和缩略图,那么我需要包含列 'path' 两次。但是我不能对每个 'path' 列应用不同的格式化函数。所以我只能有两个缩略图列或两个文本路径列。

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

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

你很接近。在视图的 column_list 属性 中定义一个 "dummy" 列,通过 column_label 属性 给它一个漂亮的标签,现在你可以使用 "dummy" 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
    }