2017-10-11 113 views
1

我遇到的一個看似基本的問題是將一個簡單的靜態文件列表(例如我的服務器上的單個存儲庫目錄的內容)作爲鏈接列表呈現。這是否安全是另一個問題,但假設我想這樣做...... 這就是我的工作目錄的樣子。我想列出模板中分析文件夾的所有文件,作爲鏈接。Django。列出來自靜態文件夾的文件

enter image description here
我試圖訪問靜態文件view.py以下一些tutorial和有它這樣的:

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 任何幫助將是非常讚賞

+0

我想你看錯了教程。 '''static'''會爲靜態資源生成一個url,而不是文件路徑。所以你應該遍歷你的文件系統併爲每個文件調用static來生成鏈接,你應該把它放到網頁 –

回答

1

它的工作原理!這裏是一個更好的方法:

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 %} 
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) 
+0

謝謝你的貢獻,Alex。我曾嘗試過,但它仍然顯示出同樣的錯誤。 「FileNotFoundError at/analytics/ [WinError 3]系統無法找到指定的路徑:'static'」併爲該行辯論「allfiles = [static(f)for listdir(mypath)if iffile(join(mypath, f))]「 –

+0

這可能是因爲你沒有替換'''mypath''的值:)。 –