Für meine persönliche Website möchte ich eine separate Seite nur für meinen Lebenslauf haben, der ein PDF ist. Ich habe mehrere Möglichkeiten ausprobiert, aber ich kann nicht herausfinden, wie man eine PDF-Datei mit einem Flaschendeckel löst.
Danke. Lassen Sie es mich wissen, wenn ich besser erklären muss, was ich zu tun versuche.
Ein Hinweis für alle, die zu dieser Frage gekommen sind, weil sie versuchen, PDF-Dateien aus einer Datenbank mit Flask bereitzustellen. Das Einbetten einer PDF, wenn die Datei in einer Datenbank gespeichert ist, ist nicht so einfach wie im statischen Ordner. Sie müssen die Funktion make_response
verwenden und sie mit den entsprechenden Headern versehen, damit der Browser weiß, was Sie mit Ihren binären PDF-Daten tun sollen, anstatt sie einfach wie üblich aus der Ansichtsfunktion zurückzugeben. Hier ist ein Pseudocode zur Hilfe:
Sie können die Inhaltsdisposition von "Inline" in "Anhang" ändern, wenn Sie möchten, dass die Datei heruntergeladen und nicht im Browser angezeigt wird. Sie könnten diese Ansicht auch in eine Subdomain einfügen, z. docs.yourapp.com und nicht yourapp.com/docs. Der letzte Schritt besteht darin, dieses Dokument tatsächlich in den Browser einzubetten. Auf jeder Seite, die Sie möchten, verwenden Sie einfach die Strategie von rawrgulmuffin:
%Vor%Du könntest sogar den src mit einer Jinja2-Vorlage dynamisieren. Lassen Sie uns dies in doc.html (beachten Sie die geschweiften Klammern):
%Vor%In einer View-Funktion geben Sie einfach die gerenderte Vorlage mit der entsprechenden doc_id zurück:
%Vor%Dies bettet ein Dokument ein, das der Benutzer von einer Datenbank mit einer einfachen GET-Anfrage angefordert hat. Hoffe das hilft jedem, der mit vielen PDFs in einer Datenbank arbeitet!
Sie haben zwei Möglichkeiten. Sie können entweder eine Vorlage rendern, die eine statische PDF-Datei verwendet, oder eine Vorlage rendern, die eine PDF generiert. Ich würde persönlich mit der ersten Option gehen.
Hier ist ein schneller und schmutziger Weg, um es zu erledigen.
%Vor%Sie können auch eine jinja2-Vorlage erstellen, die alle erforderlichen Header für die Rückgabe einer PDF-Datei festlegt und dann sagt:
%Vor%mit einer View-Funktion namens static, die das PDF zurückgibt.
Sie können mehr über die zweite Option in diesem Flashen-Snippet lesen
Sie können die Funktion flask send_file
oder send_static_file
in 5 Zeilen verwenden:
Dieser Snippet-Link ist hilfreich
Kann auch send_from_directory
verwenden, wenn Sie eine Datei aus einem bestimmten Verzeichnis senden wollen:
lesen Sie mehr über send_from_directory