首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-Admin刷新文件列表

Flask-Admin刷新文件列表
EN

Stack Overflow用户
提问于 2016-09-04 00:48:34
回答 2查看 705关注 0票数 0

Flask-Admin form tutorial code从目录中的文件创建一个列表。这是列表的填充方式:

代码语言:javascript
复制
def build_sample_db():
    # Populating the pdf files 
    db.drop_all()
    db.create_all()

    for i in [1, 2, 3]:
        file = File()
        file.name = "Example " + str(i)
        file.path = "example_" + str(i) + ".pdf"
        db.session.add(file)
    db.session.commit()
    return

if __name__ == '__main__':
    # Build a sample db on the fly, if one does not exist yet.
    build_sample_db()
    # Start app
    app.run(debug=True)

我已经将填充的代码更改为:

代码语言:javascript
复制
# get all files in a directory
def build_sample_db():
    db.drop_all()
    db.create_all()
    # It lists the files in a directory 
    ls_output = next(os.walk('/home/bor/flask-admin/examples/forms/files/'))[2]
    for f in ls_output:
        file = File()
        file.path = f
        db.session.add(file)

    db.session.commit()
    return

它列出了没有硬编码值的整个目录。但它只在应用程序启动时刷新。

Forms in Flask-Admin是一个例子,以及它看起来是什么样子。

视图添加到此处:

代码语言:javascript
复制
 admin.add_view(FileView(File, db.session))

文件视图:

代码语言:javascript
复制
class FileView(sqla.ModelView):
    # Pass additional parameters to 'path' to FileUploadField constructor
    form_args = {
        'path': {
            'label': 'File',
            'base_path': file_path,
            'allow_overwrite': False
        }
    }
    # No
    def __init__():
        db.drop_all()
        db.create_all()
        ls_output = next(os.walk('/home/bor/flask-admin/examples/forms/files/'))[2]
        for f in ls_output:
            file = File()
            file.path = f
            db.session.add(file)
        db.session.commit()

在哪里添加用于填充的代码,以便可以刷新它并重新获取目录中的文件?为了这个例子,数据库也会被重新创建。我不想创建一个新的视图,但是想刷新一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 19:10:42

覆盖视图的index_view方法。类似于(未测试的):

代码语言:javascript
复制
from flask_admin import expose

class FileView(sqla.ModelView):
    # Pass additional parameters to 'path' to FileUploadField constructor
    form_args = {
        'path': {
            'label': 'File',
            'base_path': file_path,
            'allow_overwrite': False
        }
    }

    @expose('/')
    def index_view(self):
        db.drop_all()
        db.create_all()
        ls_output = next(os.walk('/home/bor/flask-admin/examples/forms/files/'))[2]
        for f in ls_output:
            file = File()
            file.path = f
            db.session.add(file)
        db.session.commit()
        return super(FileView, self).index_view()
票数 1
EN

Stack Overflow用户

发布于 2016-09-05 23:27:20

Flask-Admin file example也回答了这个问题。文件会刷新,只是没有添加数据库,但这没问题:

代码语言:javascript
复制
from flask_admin.contrib import fileadmin
# irrelevant code removed - see in the link 
if __name__ == '__main__':
    # Create directory
    path = op.join(op.dirname(__file__), 'files')
    try:
        os.mkdir(path)
    except OSError:
        pass

    # Create admin interface
    admin = admin.Admin(app, 'Example: Files')
    # Another way to add view
    admin.add_view(fileadmin.FileAdmin(path, '/files/', name='Files'))

    # Start app
    app.run(debug=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39309227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档