gpt4 book ai didi

django - 呈现文件夹和文件树的 Django 方法是什么?

转载 作者:行者123 更新时间:2023-12-04 19:43:40 25 4
gpt4 key购买 nike

还是个新手...

在我看来,我已经使用 os.walk 来列出可用的用户文件:

for (path, dirs, files) in os.walk(docroot, topdown=True):
#...do something here

现在我想通过模板呈现这些结果。会怎么做?

这里有什么?

#...do something here

模板中包含什么?

最佳答案

如果你有一个树结构,一个目录,那么你可以把你的 for() 循环变成一个生成器,并让它根据需要递归地调用它自己。您将需要两个模板(一个用于文件,一个用于文件夹),以及一个为每个文件夹创建生成器的 View 。

这是一个文件模板:

<li>{{ file }}</li>

这是一个文件夹模板:

<li>{{ file }}<ul>{% for f in subfiles %}{{ f }}{% endfor %}</ul></li>

在您的主模板中,您需要一个根文件夹的起始列表:

<ul>{% for f in subfiles %}{{ f }}{% endfor %}</ul>

这是 View 。此示例使用 Treebeard,但分支/树叶的逻辑与文件夹/文件相同:

from django.template import loader

def index(request):
def index_maker():
def _index(root):
files = os.listdir(root)
for mfile in files:
t = os.path.join(root, mfile)
if os.path.isdir(t):
yield loader.render_to_string('demo/p_folder.html',
{'file': mfile,
'subfiles': _index(os.path.join(root, t))})
continue
yield loader.render_to_string('demo/p_file.html',
{'file': mfile})
return _index('/home/httpd/htdocs')

c = index_maker()
return render_to_response('demo/index.html',
{'subfiles': c})

每个节点要么是一个文件,要么是一个文件夹。文件夹有名称,因此在呈现文件夹时我们传递该文件夹和该文件夹中的条目(子项)列表。 _index() 函数,通过使用 yield,返回的不是子文件列表,而是一个生成器,它会在被 for 调用时生成结果在模板中循环。这成为 _index() 和模板渲染器之间的美妙舞蹈。

关于django - 呈现文件夹和文件树的 Django 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com