Bonsoir à tous,
Je suis en train de faire quelques essais avec Django. Actuellement, j'ai créé un formulaire pour proposer à l'utilisateur de téléverser un fichier. Je veux ensuite pouvoir proposer ce fichier en téléchargement, et je ne vois pas comment faire. J'ai déjà regardé la documentation et je n'ai pas trouvé d'exemples pour ce que je veux faire. Voici mon modèle :
1 2 3 4 5 6 | class Document(models.Model): nom = models.CharField(max_length=255) file = models.FileField(upload_to="pdf") description = models.TextField(null=True) def __unicode__(self): return "%s" % self.titre |
J'arrive à faire le téléversement avec cette vue :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def ajouter_document(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): nom = form.cleaned_data['nom'] file = form.cleaned_data['file'] description = form.cleaned_data['description'] envoi = 1 try: doc = Document.objects.get(nom = nom) except Document.DoesNotExist: doc = Document(nom = nom, file = file, description = description) doc.save() message = "Le document {a} a bien été ajouté !".format(a = nom) else: message = "Le document {a} existe déjà !".format(a = nom) return render(request, 'blog/ajouter_doc.html', locals()) |
Mais c'est ensuite pour proposer le fichier en téléchargement que je ne vois pas comment faire. J'ai esayé d'écrire ça (on passe l'id du fichier en paramètre) :
1 2 3 4 5 6 7 8 | def telecharger_document(request, id): try: f = Document.objects.filter(id = id)[0] data = open("%s/%s" % ('media', f.file), 'r') response = HttpResponse(data, content_type='application/octet-stream', mimetype='application/%s') return response except IndexError: raise Http404 |
Avec dans mon settings.py MEDIA_ROOT = 'media/'
et MEDIA_URL = '/media/'
.
J'espère que vous pourrez m'aider à y voir plus clair.
Merci d'avance pour vos réponses.
+0
-0