Gibt es eine clevere Lösung, um statische Dateien im Anwendungsstammverzeichnis von Flask zu speichern? robots.txt und sitemap.xml werden voraussichtlich in / gefunden, daher war meine Idee, Routen für sie zu erstellen:
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
response = make_response(open('sitemap.xml').read())
response.headers["Content-type"] = "text/plain"
return response
Es muss etwas Bequemeres geben :)
@vonPetrushev ist richtig, in der Produktion möchten Sie statische Dateien über Nginx oder Apache bereitstellen, aber für die Entwicklung ist es schön, wenn Ihre Entwicklungsumgebung einfach ist und Ihre Python-App auch den statischen Inhalt bereitstellt, damit Sie sich keine Sorgen machen müssen über das Ändern von Konfigurationen und mehrere Projekte. Dazu möchten Sie die SharedDataMiddleware verwenden .
In diesem Beispiel wird davon ausgegangen, dass sich Ihre statischen Dateien im Ordner "static" befinden. Passen Sie sie an Ihre Umgebung an.
quelle
Die sauberste Antwort auf diese Frage ist die Antwort auf diese (identische) Frage :
Zusammenfassen:
quelle
Obwohl dies eine alte beantwortete Frage ist, beantworte ich diese Frage, da dieser Beitrag in den Google-Ergebnissen ziemlich weit oben steht. Wenn Sie die API-Dokumente für den Flask Application-Objektkonstruktor lesen, wird dies zwar in der Dokumentation nicht behandelt. Durch Übergeben des benannten Parameters
static_folder
wie folgt:... können Sie festlegen, woher statische Dateien geliefert werden. Ebenso können Sie einen
template_folder
Namen für Sie definierenstatic_url_path
.quelle
/static
aber Sie können dies durch Überschreiben ändernstatic_url_path
.Das Bereitstellen statischer Dateien hat nichts mit Anwendungen zu tun, die dynamische Inhalte bereitstellen sollen. Die richtige Art der Bereitstellung statischer Dateien hängt davon ab, welchen Server Sie verwenden. Wenn Sie Ihre App zum Laufen bringen, müssen Sie sie schließlich an einen Webserver binden. Ich kann nur für Apache httpd sprechen, daher ist die Art und Weise, wie statische Dateien bereitgestellt werden, auf dem virtuellen Host definiert, den Sie über mod-wsgi an Ihre Anwendung binden. In der folgenden Anleitung erfahren Sie, wie Sie Sitemaps, robots.txt oder statische Inhalte bereitstellen : http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Mounting_At_Root_Of_Site
quelle
Eine andere Möglichkeit, statische Dateien zu senden, besteht darin, eine Sammelregel wie die folgende zu verwenden:
Ich benutze dies, um zu versuchen, das Setup bei der Entwicklung zu minimieren. Ich habe die Idee von http://flask.pocoo.org/snippets/57/ bekommen.
Außerdem entwickle ich mit flask auf meinem eigenständigen Computer, stelle es jedoch mit Apache auf dem Produktionsserver bereit. Ich benutze:
quelle
Dies könnte hinzugefügt worden sein, seit diese Frage gestellt wurde, aber ich habe die "helpers.py" von flask durchgesehen und flask.send_from_directory gefunden:
... die auf flask.send_file verweisen:
... was für mehr Kontrolle besser zu sein scheint, obwohl send_from_directory ** Optionen direkt an send_file weiterleitet.
quelle
Aus der Dokumentation hier: http://flask.pocoo.org/docs/quickstart/#static-files
quelle
Ich habe auch das gleiche Dilemma. Habe etwas gesucht und meine Antwort gefunden (MHO):
Könnte auch aus der Dokumentation zitieren
IMHO: Wenn Ihre Anwendung für die Produktion bereit ist, sollte die Bereitstellung statischer Dateien auf dem Webserver (nginx, apache) konfiguriert sein (oder ist idealerweise). aber während der Entwicklung stellte Flask es jedoch zur Verfügung, um statische Dateien bereitzustellen. Dies soll Ihnen helfen, sich schnell zu entwickeln - Sie müssen keine Webserver und dergleichen einrichten.
Ich hoffe es hilft.
quelle
Versuche dies:
quelle