django télécharger le fichier csv à l'aide d'un lien
Je suis un nouveau de django et python. Besoin de quelques conseils dans cette quête.
Cas: Lorsque l'utilisateur appuie sur le bouton submit d'un formulaire, il doit afficher la Réussite de la page et un lien où ils peuvent télécharger les résultats. Les résultats sont dans le fichier excel. Je peux créer des fichiers de sortie de fichier excel à l'aide de xlwt module et afficher la page de succès individuel, mais pas les deux en même temps.
Ce que j'ai:
Je suis en cours d'exécution django1.1.1 sur windows XP avec la version 2.6 de python. Il y était question similaire posée
mais n'a pas été capable de le faire fonctionner.
mon succès page.html a cette ligne
<a href="../static/example.xls">Download CSV File</a>
urls.py:
url(r'^static/(?P<path>.*)$', send_file),
views.py:
def send_file(request):
import os, tempfile, zipfile
from django.core.servers.basehttp import FileWrapper
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
"""
filename = "C:/example.xls" # Select your file here.
wrapper = FileWrapper(file(filename),"rb")
response = HttpResponse(wrapper, content_type='text/plain')
#response['Content-Length'] = os.path.getsize(filename)
return response
Quand je clique sur le lien, il donne une erreur de chemin d'accès
send_file() got an unexpected keyword argument 'path'
Request Method: GET
Request URL: localhost:8000/webinput/static/example.xls
Exception Type: TypeError
Exception Value:
send_file() got an unexpected keyword argument 'path'
BTW example.xls est tout à la fois les emplacements C:/example.xls et en statique dossier
Structure:
- webdb
- Statique
- example.xls
- Webinput
- urls.py
- views.py
- models.py
- Statique
J'ai ces 2 modules. Si j'utilise backup_to_csv il fonctionne très bien mais il downlods directement, sans lien. Comment faire la même chose quand j'ai déjà un fichier. Si il y a d'autres façons où je n'ai pas de fichier de la banque, c'est très bien aussi.
def xls_to_response(xls, fname):
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
xls.save(response)
return response
def backup_to_csv(demande,d'une ligne):
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename="backup.csv"'
writer = csv.writer(response, dialect='excel')
#code for writing csv file go here...
for i in row:
writer.writerow(i)
return response
OriginalL'auteur user234850 | 2009-12-18
Vous devez vous connecter pour publier un commentaire.
Maintenant, il fonctionne, mais j'ai dû changer une extension de fichier à partir d'excel (.xls) dans un fichier csv.
Mon urls.py=
url(r'^static/example.txt', send_file)
Mon lien HTML=
<a href="../static/example.txt">Download CSV File</a>
Mon view.py
OriginalL'auteur user234850
Dans votre urls.py
changement
à
Dans la première, vous êtes également en passant tout ce qui est après le /pour la vue comme un autre paramètre, mais votre point de vue n'accepte pas ce paramètre. une autre option serait d'accepter ce paramètre dans la vue:
mais depuis le chemin d'accès à votre fichier xls est codé en dur, je ne pense pas que vous avez besoin que.
OriginalL'auteur Ofri Raviv
Dans les commentaires de l'irfo Raviv. vous avez mentionné que sa vous donnant un
qui est parce que lors de la création FileWrapper u le passage de deux paramètres dont le second[facultatif] est censé être un entier, mais u passé 'rb'
Qui devrait en fait s'écrire ("rb" est le paramètre de Fichier)
wrapper = FileWrapper(fichier(nom de fichier,"rb"))
Donc, c'était juste un mauvais alignement des accolades, mais le rend difficile à déboguer parfois.
OriginalL'auteur Bunny Rabbit