Estoy aprendiendo Python & Django. (Gracias a todos los que contribuyen aquí - ¡ha sido un recurso invaluable!)Lista de contenido del archivo de directorio en una plantilla de Django
Una cosa aparentemente básica con la que estoy teniendo problemas es presentar una lista simple de archivos estáticos (por ejemplo, el contenido de un solo directorio de repositorio en mi servidor) como una lista de enlaces descargables. Si esto es seguro o no es otra cuestión, pero supongamos que quiero hacerlo ...
Este post me ayudó a dirigir en la dirección correcta: Python directory list returned to Django template
Este fragmento de código muestra los nombres de archivo en myfiles '' Si se ejecuta desde el símbolo:
path= os.path.dirname(os.path.abspath(__file__))
myfiles = os.path.join(path, 'myfiles')
os.chdir(myfiles)
for files in os.listdir("."):
print files
Pero, ¿cómo pasar estos archivos a una plantilla de Django y generar una lista de enlaces? Creo que tendré que crear un diccionario/tupla de Python para que sea iterable, pasarlo como una variable de plantilla y representarlo en un ciclo for.
¿Tengo que agregar una entrada a mi archivo urls.py para hacer esto? ¿Algo como esto?
(r'^myfiles/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'myfiles'), 'show_indexes': True}),
¡Gracias por su ayuda! Solo estoy aprendiendo y realmente no puedo entender cómo hacerlo a partir de los fragmentos de código existentes en línea.
EDIT: Esto es lo que tengo en mi views.py: (se dará cuenta de la '\\' que estoy en un sistema Windows)
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)
Así es como yo estaba tratando de conseguir que se muestre en una plantilla: (según la Django documentation)
{% for key, value in filedict %}
{{ key }}: {{ value }}
{% endfor %}
Pero 'filedict' todavía no se muestra nada en la plantilla. ¿Algunas ideas?
+1 para la gran advertencia de seguridad. –
Gracias por la respuesta Spacedman - pero la parte más difícil para mí es escribir la función views.py para crear una lista de dicts desde os.listdir, donde cada dict tiene un nombre y una url. Sé que es básico, pero ¿alguna idea allí? – fieryred
Lo que terminé con: create_filedict def (directorio): \t x = 0 \t d = {} \t de archivo en os.listdir (directorio): \t \t d [x] = (archivo) \t \t x = x + 1 \t return {'dict': d, 'size': x} – fieryred