2017-10-11 2 views
1

Une chose apparemment simple que je rencontre est de rendre une simple liste de fichiers statiques (disons le contenu d'un seul répertoire de référentiel sur mon serveur) sous la forme d'une liste de liens. Que ce soit sécurisé ou non est une autre question, mais supposons que je veuille le faire ... Voilà à quoi ressemble mon répertoire de travail. Et je veux lister tous les fichiers du dossier Analytics dans mon modèle, en tant que liens.Django. Liste des fichiers d'un dossier statique

enter image description here
J'ai essayé d'accéder à des fichiers statiques dans view.py suivant quelques tutorial et ayant comme ça:

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) 

Et mon modèle:

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

Et mes paramètres.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"), 
] 

Et je reçois l'erreur:

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

Erreur traceback Toute aide sera très appréciée

+0

Je pense que vous avez mal lu le tutoriel. '' 'static''' va générer une URL pour une ressource statique, pas le chemin du fichier. Donc, vous devriez probablement traverser votre système de fichiers et appeler statique pour chaque fichier pour générer le lien, que vous devriez mettre dans la page Web –

Répondre

1

Cela fonctionne! Voici une meilleure approche:

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

et dans le modèle

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

Je n'ai pas un django env pour essayer, mais essayer (quelque chose comme) ceci:

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

Merci pour votre contribution, Alex. J'ai essayé, mais il m'a toujours montré la même erreur. "FileNotFoundError at/analytics/ [WinError 3] Le système ne peut pas trouver le chemin spécifié: 'static'" et argumente à propos de cette ligne "allfiles = [static (f) for f dans listdir (mypath) if isfile (join (mypath, f))] " –

+0

C'est probablement parce que vous n'avez pas remplacé la valeur' '' mypath''' :). –