Liste-Verzeichnis den Inhalt der Datei in ein Django template
Ich bin nur zu lernen, Python & Django. (Vielen Dank an alle, wer trägt hier-es ist schon eine unschätzbare Ressource!)
Eine scheinbar einfache Sache, dass ich Probleme mit dem rendering ist eine einfache Liste von statischen Dateien (etwa den Inhalt eines einzigen repository-Verzeichnis auf meinem server) als eine Liste von Download-links. Ob diese sicher ist oder nicht, ist eine andere Frage, aber nehmen wir an, ich will es tun...
Diesem Beitrag geholfen zu lenken mich in die richtige Richtung:
Python-Verzeichnis-Liste zurückgegeben Django template
Diesem code-snippet Ausgänge die Dateinamen in "myfiles" wenn führen Sie von einer Eingabeaufforderung:
path= os.path.dirname(os.path.abspath(__file__))
myfiles = os.path.join(path, 'myfiles')
os.chdir(myfiles)
for files in os.listdir("."):
print files
Aber wie übertrage ich diese Dateien auf eine Django-template und generiert eine Liste von links? Ich denke, ich kann, müssen Sie erstellen ein Python-dictionary/Tupel von einer Art, um es durchsuchbar, übergeben Sie es als template-Variablen und machen es in einer for-Schleife?
Muss ich hinzufügen, einen Eintrag in mein urls.py Datei diese Arbeit zu machen? So etwas wie das?
(r'^myfiles/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'myfiles'), 'show_indexes': True}),
Vielen Dank für Ihre Hilfe! Ich bin nur zu lernen, und ich konnte nicht wirklich herausfinden, wie dies aus den vorhandenen code-snippets online.
EDIT: Dies ist, was ich habe, in meinem views.py: (du wirst bemerken, von der '\\', dass ich auf einem Windows-system)
def myfiles_page(request):
path = os.path.dirname(os.path.abspath(__file__))
myfiles = os.path.join(path, 'myfiles\\')
os.chdir(myfiles)
x = 0
d = {}
for file in os.listdir("."):
d[x] = (myfiles + file)
x = x + 1
variables = RequestContext(request, {
'user' : request.user,
'filedict' : d,
})
return render_to_response('myfiles_page.html', variables)
Dies ist, wie ich war versucht, es zu erhalten, um die Anzeige in eine Vorlage:
(nach der Django-Dokumentation)
{% for key, value in filedict %}
{{ key }}: {{ value }}
{% endfor %}
Aber 'filedict" wird noch nicht angezeigt, nichts in der Vorlage. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas sehr viel nicht, denke ich.
Werden Sie wahrscheinlich benötigen, um erstellen Sie eine Funktion des eigenen inneren views.py - siehe tutorial.
Dieser Funktion erhalten Sie die Datei-Liste von os.listdir in eine Liste.
Passieren, dass die Liste im Rahmen einer Vorlage und tun render_to_response mit einer Vorlage, die Sie geschrieben haben - siehe tutorial.
In der Vorlage, Ihrer dann so etwas wie:
Können Sie den pass etwas in den Kontext zu einer Vorlage. Möchten Sie vielleicht, um eine augmented-Liste von Dateien mit URLs zu einer Liste von dicts, wo jeder dict hat einen Namen und eine url. Dann Ihre Vorlage:
BIG FAT SICHERHEIT WARNUNG
Lassen Sie sich nicht Benutzer Dateien durchsuchen, indem Sie einen Pfad in einer URL, zumindest nicht ohne wirklich zu prüfen, dass Sie nicht tun können, Dinge wie /myfiles/../../notmyfiles/secret.txt und sehen andere Völker Dateien einfach durch kleben dot-Punkte auf dem Weg nach oben.
Wenn Sie nicht verstehen, dass, dann Sie wahrscheinlich sollte nicht die Kodierung dies alles andere als ein Spielzeug-system, dass Sie sich nicht kümmern, Riss in Stücke!