我正在尝试修改此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)
答案 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
}