Django的。列出静态文件夹中的文件

时间:2017-10-11 14:59:05

标签: python django django-staticfiles

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

enter image description here
我尝试在一些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 任何帮助将非常感激

3 个答案:

答案 0 :(得分: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/...', ...]

答案 1 :(得分:0)

我没有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)

答案 2 :(得分:0)

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

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 %}