python - 使用 Flask 显示特定目录中的文件内容

标签 python flask directory-structure static-files

我正在使用 Flask 实现一个应用程序,我试图显示我放在日志目录中的文本文件的内容。所以我这样做了:

@app.route('/files', methods = ['GET'])
def config():
    if 'username' in session :
        path = os.path.expanduser(u'~/path/to/log/')
        return render_template('files.html', tree=make_tree(path))
    else:
        return redirect(url_for('login'))

def make_tree(path):
    tree = dict(name=os.path.basename(path), children=[])
    try: lst = os.listdir(path)
    except OSError:
        pass #ignore errors
    else:
        for name in lst:
            fn = os.path.join(path, name)
            if os.path.isdir(fn):
                tree['children'].append(make_tree(fn))
            else:
                tree['children'].append(dict(name=name))
    return tree

在我的 html 页面 files.html 中:

<title>Path: {{ tree.name }}</title>
<h1>{{ tree.name }}</h1>

<div class="accordion-heading" >
    <div class="accordion-toggle" >
         <a data-toggle="collapse"  data-target="#files_list" href="#files_list">
            <b>

<ul>
{%- for item in tree.children recursive %}
 <div class="well well-sm">   <li>{{ item.name }} </div>
    {%- if item.children -%}
        <ul>{{ loop(item.children) }}</ul>
    {%- endif %}</li>
{%- endfor %}
</ul>

 </b></div>
         </a>
    </div>

这只会显示我的日志目录中的文件名,但我无法显示文件的内容。 我想也许我可以使用类似的东西:

import fnmatch
def display_files():
    for dirpath, dirs, files in os.walk('log'):
        for filename in fnmatch.filter(files, '*.*'):
        with open(os.path.join(dirpath, filename)) as f:
            file_contents = f.read().strip()
            print file_contents

    return render_template('files.html',title="index",file_contents=file_contents) 

有什么帮助吗??

最佳答案

您可能可以读取文件内容并将其传递给 make_tree 中的模板像这样的功能:

def make_tree(path):
    tree = dict(name=os.path.basename(path), children=[])
    try: lst = os.listdir(path)
    except OSError:
        pass #ignore errors
    else:
        for name in lst:
            fn = os.path.join(path, name)
            if os.path.isdir(fn):
                tree['children'].append(make_tree(fn))
            else:
                with open(fn) as f:
                    contents = f.read()
                tree['children'].append(dict(name=name, contents=contents))
    return tree

然后添加 <pre>{{ item.contents }}</pre>到要显示文件内容的地方。例如,这里:

{%- for item in tree.children recursive %}
     <div class="well well-sm">
        <li>
            {{ item.name }}
            <pre>{{ item.contents }}</pre>
            {%- if item.children -%}
                <ul>{{ loop(item.children) }}</ul>
            {%- endif %}
        </li>
    </div>
{%- endfor %}

这有点丑陋,但它应该显示正确的数据。

关于python - 使用 Flask 显示特定目录中的文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205448/

相关文章:

python - 数据库查询中的NameError

git - Go 项目中的微服务和 monolit git 存储库

python - python中的定时电子邮件提醒

python - 正则表达式检测双花括号之间的文本

python - 属性错误: 'list' object has no attribute '_meta'

Python 2 + Flask - 导入错误 : No module named request

分层多模块项目的 Maven 命名约定

java - 如何在JTree中添加windows目录结构?

python - ValueError : numpy. dtype 大小错误,尝试重新编译

python - 属性错误 : 'bytes' object has no attribute 'encode' ; base64 encode a pdf file