2017-10-11 4 views
1

Eine scheinbar grundlegende Sache, mit der ich Probleme habe, ist das Rendern einer einfachen Liste von statischen Dateien (sagen wir den Inhalt eines einzelnen Repository-Verzeichnisses auf meinem Server) als eine Liste von Links. Ob das sicher ist oder nicht, ist eine andere Frage, aber angenommen, ich möchte es tun ... So sieht mein Arbeitsverzeichnis aus. Und ich möchte alle Dateien für Analytics-Ordner in meiner Vorlage als Links auflisten.Django. Auflisten von Dateien aus einem statischen Ordner

enter image description here
Ich habe versucht, folgende einige tutorial statische Dateien in view.py zugreifen und es so mit:

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) 

Und meine Vorlage:

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

Und meine 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"), 
] 

Und ich bin immer die Fehlermeldung:

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

Fehler traceback Jede Hilfe wird sehr

+0

Ich glaube, Sie das Tutorial falsch gelesen. '' 'static''' erzeugt eine URL für eine statische Ressource, nicht den Dateipfad. Sie sollten also Ihr Dateisystem durchqueren und für jede Datei statisch aufrufen, um den Link zu generieren, den Sie in die Webseite –

Antwort

1

Es funktioniert! Hier ist ein besserer Ansatz:

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

und in Vorlage

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

Ich habe nicht ein django env zu versuchen, diese aus, aber versuchen (so etwas wie) geschätzt werden dies:

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

einfügen sollten. Vielen Dank für Ihren Beitrag, Alex. Ich habe es versucht, aber es zeigte mir immer noch den gleichen Fehler. "FileNotFoundError at/analytics/ [WinError 3] Das System kann den angegebenen Pfad nicht finden: 'static'" und argumentiert über diese Zeile "allfiles = [static (f) für f in listdir (mypath) if isfile (join (mypath, f))] " –

+0

Dies liegt wahrscheinlich daran, dass Sie den' '' mypath''' Wert nicht ersetzt haben :). –

Verwandte Themen