Foros del Web » Programando para Internet » Python »

Uso FileField en Django

Estas en el tema de Uso FileField en Django en el foro de Python en Foros del Web. Hola! Estoy programando una web con django. Me gustaría dar la opción a los usuarios de poder subir un archivo. Tengo entendido que hay que ...
  #1 (permalink)  
Antiguo 26/01/2011, 06:57
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Uso FileField en Django

Hola!

Estoy programando una web con django. Me gustaría dar la opción a los usuarios de poder subir un archivo. Tengo entendido que hay que utilizar en el modelo el campo FileField al cual hay que decirle en que directorio queremos que guarde el archivo, pero ¿que hay que usar en la plantilla html?

He puesto lo siguiente:

Código HTML:
<input type="file" name="archivo" > 
Pero una vez el usuario seleccione el archivo no sé que es lo que tengo que hacer.
Gracias
  #2 (permalink)  
Antiguo 26/01/2011, 08:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Uso FileField en Django

Recuerda que en principio no es necesario usar una plantilla personalizada, así que bien podés mirar la plantilla original que resulta al poner 'renderform', o el html resultado de poner {{ campo }} en la plantilla.

No tengo código ahora para mostrar, pero la plantilla por defecto está en la carpeta de django.


Saludos.
  #3 (permalink)  
Antiguo 31/01/2011, 02:48
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Uso FileField en Django

Según la documentación de Django:

http://docs.djangoproject.com/en/1.2...lds/#filefield

pensé que se podía hacer usando:

class FileField(upload_to=None[, max_length=100, **options])

Lo he intentado pero no se guarda el archivo en el directorio. ¿Alguién ha probado a hacerlo así?
  #4 (permalink)  
Antiguo 31/01/2011, 17:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Uso FileField en Django

¿dónde está tu código? sin verlo es difícil encontrar el error
  #5 (permalink)  
Antiguo 01/02/2011, 02:44
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Uso FileField en Django

Vale, lo siento, pongo el código y os explico lo que he hecho.
Según entiendo de la documentación de Django que he dejado arriba, con la clase FileField, se puede seleccionar un archivo en el lado cliente y éste se guardará en un directorio del servidor. El código que tengo es este:
En el modelo:

Código:
from django.db import models
class Video(models.Model):
        file = models.FileField(upload_to='resources/media/', blank = True)
Pretendo entonces que me guarde el archivo en la carpeta media.

En el template, tengo lo siguiente;

Código HTML:
<form action="/videos/" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="id_file" />
<input type="submit" value="Guardar">
</form> 
Cuando el usuario seleccione el archivo que desea guardar en el servidor y pinche en "Guardar", el archivo será enviado en la petición HTTP como un objeto requets.FILES. Supongo que tengo que hacer algo con este objeto para que se guarde en el directorio, porque no se me copia. ¿Entendeis mi duda? ¿Alguien sabe que tengo que hacer?

Gracias!

Última edición por AubeRoseau; 01/02/2011 a las 02:49
  #6 (permalink)  
Antiguo 01/02/2011, 07:02
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Uso FileField en Django

Al final he conseguido dar con la solución. Lo dejo por aquí por si a alguien le interesa. El modelo y el template no hay que modificarlos, lo que habría que hacer en la vista es lo siguiente:

Código Python:
Ver original
  1. from videos.models import Video
  2. def videos(request):
  3.         file = request.FILES['file']
  4.         video = Video(file)
  5.         video.save()
  6.  
  7.         return render_to_response('videos/videos.html')

Tan sencillo como eso!!

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:37.