Erstellen von CSV-Datei mit Django (dynamic content)
In meinem view.py ich habe zwei Funktionen, eine, die die Eingabe verarbeitet, die aus einem form-und Ausgängen eine gefilterte Liste, und ein anderes, das soll diese Liste exportieren, um CSV.
Hier ist die Rückkehr von meiner ersten Funktion:
return render_to_response('templateX.html',
{
'queryset': queryset,
'filter_form': filter_form,
'validated': validated,
},
context_instance = RequestContext(request)
)
Hier ist die exportieren-Funktion:
def export_to_csv(request):
# get the response object, this can be used as a stream.
response = HttpResponse(mimetype='text/csv')
# force download.
response['Content-Disposition'] = 'attachment;filename=export.csv'
# the csv writer
writer = csv.writer(response)
qs = request.session['queryset']
for cdr in qs:
writer.writerow([cdr['calldate'], cdr['src'], cdr['dst'], ])
return response
Ich bin mir nicht sicher, wie man die queryset von meiner ersten Funktion, die eine Liste der Elemente möchte ich in meinem CSV und verwenden Sie es in meinem export_to_csv Funktion.
Oder würde der beste Weg sein, die Kombination dieser beiden Funktionen und die Benutzer klicken Sie auf ein Kontrollkästchen, ob er/Sie will eine CSV-Datei herunterladen.
Jede Hilfe würde geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, kombinieren diese in einer view-Funktion, die einen zusätzlichen parameter:
Dann in Ihrer
urls.py
, etwas wie dies in Ihrerurlpatterns
:<input type="hidden" name="foo" value="bar" />
. Ich weiß nicht, ob Django hat einige Besondere Magie erzeugen, aber Sie sind ziemlich leicht zu erzeugen auf Ihrem eigenen. Denken Sie einfach daran, auch wenn Sie den form-parameter kam aus einem versteckten Bereich, Vertrauen ihm nicht implizit. Validieren Sie es.mimetype
solltecontent_type
. Es ist jetzt geändertIMHO, das beste würde sein, Sie zu kombinieren und erzeugen der CSV-Daten von einer expliziten queryset. Dies könnte dann umgeschrieben werden, um etwas Allgemeines wie(nicht getestet):
Die Sie verwenden können, wie diese:
--
Den Beispiel-code, den Sie zur Verfügung gestellt, übernimmt der QuerySet in der session-Daten, die dazu führen könnten Sie Tonnen von bugs sowie Probleme der Sicherheit. Wenn Sie die Speicherung von sessions in der Datenbank, Sie könnten am Ende die Daten zu Lesen, nur schreiben Sie es zurück auf eine viel weniger effiziente form.
Fand ich einen Weg, es zu tun, die anders als knutin ist.
Als ich erklärte, dass eine leere Liste mit dem Namen csv_list = [] außerhalb meiner Funktionen oder Globale Variablen.
In meiner main-Funktion (die, - Prozesse und-Filter (basierend auf Benutzereingabe), kann ich diese csv_list global, so kommt er auf die "aktualisierte" version der queryset.
Dann zum generieren der csv, es ist so einfach wie:
für call-in csv_list:
Schriftsteller.writerow([nennen.src rufen.dst])
zurück Antwort
Es funktioniert jetzt einigermaßen.
csv_list
. Benutzer 2 hat die gleiche Sache, die setzt wiedercsv_list
. Nutzer 1 exportiert die CSV und bekommt Benutzer 2 die Daten viacsv_list
statt.Findet Folgendes in eine Django-queryset und spuckt eine CSV-Datei.
Verwendung::
Dem Skript: