姜戈。列出静态文件夹中的文件

Posted

技术标签:

【中文标题】姜戈。列出静态文件夹中的文件【英文标题】:Django. Listing files from a static folder 【发布时间】:2018-03-23 07:48:02 【问题描述】:

我遇到的一个看似基本的问题是将一个简单的静态文件列表(比如我服务器上单个存储库目录的内容)呈现为链接列表。这是否安全是另一个问题,但假设我想这样做...... 这就是我的工作目录的样子。我想在我的模板中列出所有来自分析文件夹的文件,作为链接。

我曾尝试按照tutorial 访问 view.py 中的静态文件,并拥有它: view.py

from os import listdir
from os.path import isfile, join
from django.contrib.staticfiles.templatetags.staticfiles import static


def AnalyticsView(request):
    mypath = static('/analytics')
    allfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

    return render_to_response('Rachel/analytics.html', allfiles)

还有我的模板:

<p>ALL FILES:</p>
% for file in allfiles %
   file 
    <br>
% endfor %

还有我的 settings.py

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

我得到了错误:

FileNotFoundError at /analytics/
[WinError 3] The system cannot find the path specified: '/analytics'

错误traceback 任何帮助将不胜感激

【问题讨论】:

我认为您误读了教程。 static 将为静态资源生成 url,而不是文件路径。因此,您可能应该遍历文件系统并为每个文件调用 static 以生成链接,您应该将其放入网页中 【参考方案1】:

遇到类似问题,使用 django 实用程序找到以下解决方案:

from django.contrib.staticfiles.utils import get_files
from django.contrib.staticfiles.storage import StaticFilesStorage

s = StaticFilesStorage()
list(get_files(s, location='analytics'))
# ['analytics/report...', 'analytics/...', ...]

【讨论】:

甜蜜!感谢您的回答。我会接受它,因为它现在与我之前提出的方法无关。 ;)【参考方案2】:

我没有 django env 来试试这个,但是试试(类似的)这个:

def AnalyticsView(request):
    mypath = 'static'
    allfiles = [static(f) for f in listdir(mypath) if isfile(join(mypath, f))]

    return render_to_response('Rachel/analytics.html', allfiles)

【讨论】:

感谢您的贡献,Alex。我试过了,但它仍然向我显示同样的错误。 “FileNotFoundError at /analytics/ [WinError 3] 系统找不到指定的路径:'static'”并争论该行“allfiles = [static(f) for f in listdir(mypath) if isfile(join(mypath, f ))] " 这可能是因为您没有替换 mypath 值:)。【参考方案3】:

有效!这是一个更好的方法:

import os

def AnalyticsView(request):
    path="E:\\Development\\Information_Access_Project\\Information_Access_Project\\static\\analytics"  # insert the path to your directory
    analytics_list =os.listdir(path)
    return render_to_response('Rachel/analytics.html', 'analytics': analytics_list)

在模板中

% for analytic in analytics %
    <a href="/static/analytics/ analytic "> analytic </a>
    <br>
% endfor %

【讨论】:

对路径进行硬编码不是一个好的解决方案:/ 您可以在这里使用static\\analytics 作为路径。

以上是关于姜戈。列出静态文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何列出具有 .o 扩展名的静态库中的文件名

Linux的nm查看动态和静态库中的符号

链接 与 加载

Django AllAuth 静态文件未显示

Linux的nm命令查看动态库和静态库中的符号

查看.a 静态库中的.o文件