当前位置: 首页 > 面试题库 >

如何使用Python生成html目录列表

谷弘致
2023-03-14
问题内容

我在使用Python生成html文档时遇到了一些问题。我正在尝试创建目录树的HTML列表。这是我到目前为止所拥有的:

def list_files(startpath):
    for root, dirs, files in os.walk(startpath):
        level = root.replace(startpath, '').count(os.sep)
        if level <= 1:
            print('<li>{}<ul>'.format(os.path.basename(root)))
        else:
            print('<li>{}'.format(os.path.basename(root)))
        for f in files:
            last_file = len(files)-1
            if f == files[last_file]:
                print('<li>{}</li></ul>'.format(f))
            elif f == files[0] and level-1 > 0:
                print('<ul><li>{}</li>'.format(f))
            else:
                print('<li>{}</li>'.format(f))
    print('</li></ul>')

如果只有根目录,一级子目录和文件,这似乎很好。但是,添加另一级子目录会导致出现问题(因为我认为关闭标记在最后输入的次数不足)。但是我很难理解它。

如果无法通过这种方式完成操作,是否有更简单的方法可以执行?我正在使用Flask,但是对模板的经验不足,所以也许我缺少了一些东西。


问题答案:

你可以将目录树的生成及其呈现方式分离为html。

要生成树,可以使用一个简单的递归函数:

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,可以使用jinja2的循环recursive功能

<!doctype html>
<title>Path: {{ tree.name }}</title>
<h1>{{ tree.name }}</h1>
<ul>
{%- for item in tree.children recursive %}
    <li>{{ item.name }}
    {%- if item.children -%}
        <ul>{{ loop(item.children) }}</ul>
    {%- endif %}</li>
{%- endfor %}
</ul>

将html放入templates/dirtree.html文件中。要对其进行测试,请运行以下代码并访问http://localhost:8888/:

import os
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def dirtree():
    path = os.path.expanduser(u'~')
    return render_template('dirtree.html', tree=make_tree(path))

if __name__=="__main__":
    app.run(host='localhost', port=8888, debug=True)


 类似资料:
  • 问题内容: 我创建了一个带有s 的文档。 如何生成此文档的目录? 它看起来应该像这样: 问题答案: 通过使用s 可以实现。s是一种可以稍后填充的占位符。 来自Bruno的提示更新: 要在开始时在目录中生成,您需要为目录中的所有页码放置一些占位符。你收集的那些。然后,将s 添加到文档中时,可以填充这些占位符。 此示例显示如何: 生成的PDF如下所示: TableOfContents.pdf

  • 我的版本:jkd11 我尝试了下面的代码,但抛出了Docx4JException,但github演示就是这样https://github.com/plutext/docx4j/blob/docx4j-parent-11.1.0/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/TocAdd.java

  • 在阅读的API时,我错过了很多函数。首先,它建议使用for循环从stream转到。而且我忽略了一个事实,即不是。 如何在Java8中从生成?

  • 本文向大家介绍python列表生成式与列表生成器的使用,包括了python列表生成式与列表生成器的使用的使用技巧和注意事项,需要的朋友参考一下 列表生成式:会将所有的结果全部计算出来,把结果存放到内存中,如果列表中数据比较多,就会占用过多的内存空间,可能会导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况 列表生成器:会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如

  • 问题内容: 我正在寻找一个易于实现的python html生成器。我找到了这个 但是无法为表添加CSS元素(ID,类)。 谢谢 问题答案: 如果您希望通过程序生成而不是模板生成,那么Karrigell的HTMLTags模块是一种可能。它可以通过大写其首字母的技巧(例如,引用我刚刚给出的doc URL)来包括例如属性(在Python中为保留字)。 与Python关键字(类,类型)同名的属性必须大写:

  • 问题内容: 我需要用python抓取网站。我使用urlib模块获取了源html代码,但是我还需要抓取由javascript函数(包含在html源代码中)生成的html代码。该功能在站点中的作用是,当您按下按钮时,它会输出一些html代码。如何使用python代码“按”此按钮?可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,出现403错误。有什么建议么? 问题答案