如何覆盖flaskadmin的缩略图名称生成?

2024-09-28 23:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有最困难的时间试图自定义烧瓶管理,以改变我的管理视图缩略图的名称。我一直在寻找如何做到这一点,我认为答案在ImageUploadField的namegen和thumbgen属性中,但我不确定。有人能帮忙吗?这就是我要做的。在

第一步:

这是我为管理视图生成的模型。它是一个有字段的雇员。在

class Employee(db.Model):
  __tablename__ = 'employees'
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(200))
  title = db.Column(db.String(200))
  email = db.Column(db.String(200))
  department = db.Column(db.String(200))
  path = db.Column(db.String(300))

  def __init__(self, name='', title='', email='', department='', path=''):
    self.name = name
    self.title = title
    self.email = email
    self.department = department
    self.path = path

  def __repr__(self):
    return '<Employee %r>' % self.name
admin.add_view(EmployeeView(Employee, db.session))

第二步:

对于这个步骤,用户通过表单上传员工的上传信息。当他们按下submit时,会出现一些自定义代码,这将导致第3步。在

第三步:

我有一个listens_for回调函数,它使用它们提供的映像的名称并将文件名更改为雇员的名称。 例如,如果我上传一个名为我.jpg,此文件将更改为Daniel卢比奥.jpg并将作为Daniel Rubio存储在员工的路径字段中。代码如下:

^{pr2}$

此外,此代码将重命名我.jpg在我的static/images/folder给Daniel卢比奥.jpg静态/图像/

第四步:

接下来,我使用Flask Admin从示例代码中获取此代码,以显示我的模型及其关联的图像。代码如下:

class EmployeeView(ModelView):
def _list_thumbnail(view, context, model, name):
    if not model.path:
        return ''
    return Markup('<img src="%s">' % url_for('static',
                                              filename= 'images/' + form.thumbgen_filename(model.path)))
column_formatters = {
    'path': _list_thumbnail
}

form_extra_fields = {
    'path': form.ImageUploadField('Image', base_path=file_path, thumbnail_size=(100, 100, True))
}
def is_accessible(self):
    return flask_login.current_user.is_authenticated

我把所有的东西都连接起来,这样图像就可以在需要的任何地方正确命名,除了在我的“static/images”文件夹中。在我通过Flask admin提交员工后,我的我.jpg产生一个我_拇指.jpg而不是丹尼尔·鲁比奥_拇指.jpg. 我一辈子都不知道如何定制这个,这样就不会再发生这种事了。我很确定在这里找到的ImageUploadField中会发生这种情况Flask-Admin ImageUploadField,但是我不能让它工作。我该怎么做才能让这个工作起来?我们将不胜感激。在


修复尝试#1

重写ImageUploadField

class ImageOverride(form.ImageUploadField('Image', base_path=file_path, thumbnail_size=(100, 100, True))):
def __init__(self, thumbgen=None):
    self.thumbgen=self.path


class EmployeeView(ModelView):
    def _list_thumbnail(view, context, model, name):
        if not model.path:
            return ''
        return Markup('<img src="%s">' % url_for('static',
                                                  filename= 'images/' + form.thumbgen_filename(model.path)))
    column_formatters = {
        'path': _list_thumbnail
    }

    form_extra_fields = {
        'path': ImageOverride()
    }
    def is_accessible(self):
        return flask_login.current_user.is_authenticated

结果:

Error: `TypeError: 'UnboundField' object is not callable`

Tags: path代码nameselfformdbstringmodel
1条回答
网友
1楼 · 发布于 2024-09-28 23:28:17

最后,我不得不绕开乔斯的建议,而是想出了这个解决方案:

class EmployeeView(ModelView):
def _list_thumbnail(view, context, model, name):
    if not model.path:
        return ''
    return Markup('<img height="100" width="100" src="%s">' % url_for('static',
                                              filename= 'images/' + model.path))
column_formatters = {
    'path': _list_thumbnail
}

form_extra_fields = {
    'path': form.ImageUploadField('Image', base_path=file_path)
}

def is_accessible(self):
    return flask_login.current_user.is_authenticated

相关问题 更多 >