822 votes

Comment faire pour servir des fichiers statiques dans ballon

Donc, c'est embarrassant. J'ai une application que j'ai jeté en Flask et pour le moment c'est simplement de servir une seule page HTML statique avec quelques liens vers des CSS et JS. Et je ne trouve pas où dans la documentation Flask décrit le retour des fichiers statiques. Oui, je pourrais l'utiliser render_template mais je sais que les données ne sont pas templatized. J'aurais pensé send_file ou url_for était la bonne chose, mais je ne pouvais pas obtenir ces au travail. En attendant, je vais ouvrir les fichiers, la lecture du contenu, et le gréement d'un Response avec appropriée, type mime:

import os.path

from flask import Flask, Response


app = Flask(__name__)
app.config.from_object(__name__)


def root_dir():  # pragma: no cover
    return os.path.abspath(os.path.dirname(__file__))


def get_file(filename):  # pragma: no cover
    try:
        src = os.path.join(root_dir(), filename)
        # Figure out how flask returns static files
        # Tried:
        # - render_template
        # - send_file
        # This should not be so non-obvious
        return open(src).read()
    except IOError as exc:
        return str(exc)


@app.route('/', methods=['GET'])
def metrics():  # pragma: no cover
    content = get_file('jenkins_analytics.html')
    return Response(content, mimetype="text/html")


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_resource(path):  # pragma: no cover
    mimetypes = {
        ".css": "text/css",
        ".html": "text/html",
        ".js": "application/javascript",
    }
    complete_path = os.path.join(root_dir(), path)
    ext = os.path.splitext(path)[1]
    mimetype = mimetypes.get(ext, "text/html")
    content = get_file(complete_path)
    return Response(content, mimetype=mimetype)


if __name__ == '__main__':  # pragma: no cover
    app.run(port=80)

Quelqu'un veut donner un exemple de code ou d'une url pour cela? Je sais que cela va être simple.

954voto

atupal Points 1825

Vous pouvez utiliser nginx ou tout autre serveur web pour servir des fichiers statiques, mais pas de ballon. :)

Et autre que , vous pouvez utiliser et``

``exemple :

``exemple :

122voto

sharpshadow Points 17

Vous pouvez également, et c’est ma préférée, définissez un dossier comme chemin d’accès statique afin que les fichiers à l’intérieur sont accessibles pour tout le monde.

Avec cet ensemble, vous pouvez utiliser le code HTML standard :

94voto

b4stien Points 363

Je suis sûr que vous trouverez ce que vous devez y : http://flask.pocoo.org/docs/quickstart/#static-files

Fondamentalement, vous devez juste un dossier « statique » à la racine de votre colis, et vous pouvez alors utiliser `` ou directement un lien vers vos fichiers avec http://example.com/static/foo.bar.

52voto

Kyle Sum Points 151

Ce que j'utilise (et ça a été génial de travailler) est un des "modèles" de répertoire et un "statique" du répertoire. Je place tous mes .les fichiers html/Flacon de modèles à l'intérieur du répertoire de modèles et statique contient CSS/JS. render_template fonctionne très bien pour les fichiers html à ma connaissance, quelle que soit la mesure à laquelle vous avez utilisé Flacon de syntaxe spécifique. Ci-dessous est un exemple d'appel dans mon views.py fichier.

@app.route('/projects')
def projects():
    return render_template("projects.html", title = 'Projects')

Juste assurez-vous d'utiliser url_for() si vous ne voulez référence statique fichier dans le répertoire statique. Vous aurez probablement finir par faire cela de toute façon dans votre CSS/JS des liens vers des fichiers au format html. Par exemple...

<script src="{{ url_for('static', filename='styles/dist/js/bootstrap.js') }}"></script>

Voici un lien vers le "canonique" informel Flacon tutoriel - beaucoup de bons conseils ici pour vous aider à frapper le sol en cours d'exécution.

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

49voto

Zhuinden Points 3074

Un exemple de travail plus simple, basé sur les autres réponses est les suivantes :

Avec le code HTML appelé index.html:

Et index.html est dans un dossier appelé public static, sens a la fichier, et a la fichier.

Si vous souhaitez que le serveur soit visible sur le réseau, utilisez``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X