Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

suppression de fichier et django

4 réponses
Avatar
hervest
Bonjour,
J'aimerais supprimer une photo dans un répertoire lors d'une mise à jour. Voici mon code

if formset.is_valid():
if request.FILES['form-0-photo'] != pict.photo:
os.remove(unicode(pict.photo))
formset.save()

avec pict.photo le nom du chemain stocké dans la base donc "si la photo upload est différente de celle dans la base la supprimer"

et j'ai cette erreure ci [Errno 2] No such file or directory: 'photo/image1.jpg'

j'ai changer le chemain en ajoutant d'autres "os.remove("../media/img/unicode(pict.photo))" mais ça marche pas. La photo se trouve dans le répertoire media de mon application django /media/img/image1.jpg

Merci

4 réponses

Avatar
Mihamina Rakotomandimby (R12y)
hervest wrote:
os.remove(unicode(pict.photo)) [...]
et j'ai cette erreure ci [Errno 2] No such file or directory:
'photo/image1.jpg'



Il faudrait voir à partir de quel répertoire est appelé os.remove().
Je te propose de faire un truc du genre:

os.remove(os.getcwd()+unicode(pict.photo))

Ca t'affichera à partir d'ou django appele os.remove.
Avatar
Bruno Desthuilliers
hervest a écrit :
Bonjour,
J'aimerais supprimer une photo dans un répertoire lors d'une mise à jour. Voici
mon code

if formset.is_valid():
if request.FILES['form-0-photo'] != pict.photo:
os.remove(unicode(pict.photo))



Pourquoi "unicode" ?

formset.save()

avec pict.photo le nom du chemain stocké dans la base donc "si la photo upload
est différente de celle dans la base la supprimer"

et j'ai cette erreure ci [Errno 2] No such file or directory:
'photo/image1.jpg'

j'ai changer le chemain en ajoutant d'autres
"os.remove("../media/img/unicode(pict.photo))" mais ça marche pas.



Ce chemin est relatif au répertoire de travail courant - pas au fichier.
Et accessoirement:

La photo se
trouve dans le répertoire media de mon application django /media/img/image1.jpg



heu... c'est 'photo/image1.jpg' ou 'img/image1.jpg' ?

Mais bon: de toutes façons, ce que tu veux, c'est le chemin vers ton
repertoire media, lequel 1/ est paramétrable et 2/ n'est pas
nécessairement un sous-répertoire de ton projet django. Bref:


from django.conf import settings
filepath = os.path.join(settings.MEDIA_ROOT, pict.photo)
os.remove(filepath)

devrait fonctionner - du moins si filepath existe et que l'utilisateur
sous lequel tourne ton appli django a les droits d'écriture qui vont
bien sur ce chemin.

HTH
Avatar
Bruno Desthuilliers
Mihamina Rakotomandimby (R12y) a écrit :
hervest wrote:
os.remove(unicode(pict.photo)) [...]
et j'ai cette erreure ci [Errno 2] No such file or directory:
'photo/image1.jpg'



Il faudrait voir à partir de quel répertoire est appelé os.remove().
Je te propose de faire un truc du genre:

os.remove(os.getcwd()+unicode(pict.photo))


>
Ca t'affichera à partir d'ou django appele os.remove.



Ce qui ne résoudra pas le problème, puisque 1/ le cwd est susceptible de
changer selon la façon dont est lancé le serveur et 2/ le répertoire
'media' de Django est paramétrable.

cf mon autre post dans ce fil pour la solution correcte.
Avatar
hervest
Bruno Desthuilliers a écrit le 22/01/2009 à 10h26 :
Mihamina Rakotomandimby (R12y) a écrit :
hervest wrote:
os.remove(unicode(pict.photo)) [...]
et j'ai cette erreure ci [Errno 2] No such file or directory:
'photo/image1.jpg'




Il faudrait voir à partir de quel répertoire est appelé
os.remove().
Je te propose de faire un truc du genre:

os.remove(os.getcwd()+unicode(pict.photo))



>
Ca t'affichera à partir d'ou django appele os.remove.




Ce qui ne résoudra pas le problème, puisque 1/ le cwd est
susceptible de
changer selon la façon dont est lancé le serveur et 2/ le
répertoire
'media' de Django est paramétrable.

cf mon autre post dans ce fil pour la solution correcte.


bonsoir
j'ai résolu j'ai juste fait un pict.photo.delete()