Comment servir des fichiers statiques dans Flask avec Blueprints

crétin

J'avais une application Flask qui fonctionnait bien jusqu'à ce que, en raison de la croissance, je décide de la modulariser. La nouvelle structure est la suivante :

├── Dockerfile
├── README.md
├── app
│   ├── __init__.py
│   ├── config.py
│   ├── cron.py
│   ├── database.ini
│   ├── db.py
│   ├── db.sqlite3
│   └── webapp
│       ├── __init__.py
│       └── routes.py
├── db.sqlite3
├── docker-compose.yml
├── error.log
├── gunicorn_config.py
├── rd.py
├── requirements.txt
├── static
│   ├── css
│   │   └── bootstrap.min.css
│   ├── data.html
│   ├── fonts
│   │   ├── glyphicons-halflings-regular.eot
│   │   ├── glyphicons-halflings-regular.svg
│   │   ├── glyphicons-halflings-regular.ttf
│   │   ├── glyphicons-halflings-regular.woff
│   │   └── glyphicons-halflings-regular.woff2
│   ├── images
│   │   ├── ajax-loader.gif
│   │   ├── gear.png
│   │   ├── gear_small.png
│   │   └── logo.png
│   ├── index.html
│   ├── js
│   │   ├── app.js
│   │   ├── bootbox.min.js
│   │   ├── bootstrap.js
│   │   ├── bootstrap.min.js
│   │   └── npm.js
│   ├── login.html
│   ├── manage_users.html
│   ├── register.html
│   ├── reset_password.html
│   ├── settings.html
│   └── upload.html
└── templates
    └── base.html

Voici l'application __init__.pyweb pour :

from flask import Flask
from app.config import DebugConfig
from flask_sqlalchemy import SQLAlchemy
from importlib import import_module
from logging import basicConfig, DEBUG, getLogger, StreamHandler
import os

import uuid

def register_blueprints(app):
    for module_name in (app.config['MODULES']):
        module = import_module('app.{}.routes'.format(module_name))
        app.register_blueprint(module.blueprint)

def configure_logs(app):
    basicConfig(filename='error.log', level=DEBUG)
    logger = getLogger()
    logger.addHandler(StreamHandler())

def create_app():
    file = (__file__)
    app = Flask(__name__)
    app.secret_key = str(uuid.uuid4())
    app.config.from_object(DebugConfig)
    register_blueprints(app)
    configure_logs(app)

    return app

Voici le code de route de la page de connexion :

@blueprint.route("/login", methods=["GET", "POST"])
def login():

    if request.method == 'GET':
        return render_template(url_for('static', filename='login.html')

Malheureusement, cette nouvelle structure entraîne cette erreur lorsque j'essaie de servir l'application :

Builtins.FileNotFoundError FileNotFoundError : [Errno 2] Aucun fichier ou répertoire de ce type : '/static/login.html'

Cela fait un moment que je joue avec cela et je ne sais pas comment faire fonctionner l'application et réussir à localiser les fichiers. J'ai essayé de définir la static_url_pathvaleur lors de l'instanciation de l'application flask mais, bien que cela réussisse à localiser les fichiers HTML, je ne parviens pas à charger les autres fichiers statiques comme CSS et images car mes chemins sont définis par rapport au dossier statique comme ci-dessous dans le HTML :

<link href="css/bootstrap.min.css?version=24" > ou alors <link rel="icon" href="/static/images/gear.png">

Aidez-moi, je sens que je vais m'arracher les cheveux car j'ai passé trop de temps sur ce problème. Merci d'avance.

Tony Moutaux

Ce que vous recherchez, c'est le Flask jinja_loader .

Dans votre méthode create_app, vous pouvez écraser le jinja_loader fourni par défaut pour Flask, qui recherche dans le répertoire template_folder pour rechercher un fichier à l'aide de la méthode render_template.

def create_app():
    file = (__file__)
    app = Flask(__name__)
    app.secret_key = str(uuid.uuid4())
    app.config.from_object(DebugConfig)
    register_blueprints(app)
    configure_logs(app)

    # Overwrite Flask jinja_loader, using ChoiceLoader
    template_loader = jinja2.ChoiceLoader([
        app.jinja_loader,
        jinja2.FileSystemLoader('/path/to/static'),
    ])
    app.jinja_loader = template_loader

    return app

Jinja2 ChoiceLoader recherche un modèle dans la liste des chargeurs. Donc d'abord dans app.jinja_loader : le répertoire template_folder. Ensuite, en utilisant le FileSystemLoader dans le répertoire /static. Soyez averti que si vous avez un modèle quelque chose.html à la fois dans le modèle et dans le répertoire statique, le premier sera renvoyé.

Mais Jinja2 a plus de chargeur que le CoiceLoader et vous devriez essayer d'en trouver un qui correspond à vos désirs. Par exemple, le DictLoader avec une clé 'static' pourrait également convenir

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment servir des fichiers statiques dans Flask

Comment servir des fichiers statiques simples avec HTML dans NodeJS?

Comment servir des fichiers statiques avec Waitress et Django?

Comment servir des fichiers statiques avec Spock et Lucid?

Comment servir des fichiers statiques avec une authentification de base?

Comment servir des fichiers statiques ReactJS avec expressJS?

Comment servir des fichiers statiques enregistrés dans un volume docker avec FastAPI ?

Comment puis-je servir des fichiers statiques dans django?

Servir des fichiers statiques avec Servant / Wai

Servir des fichiers statiques avec Jersey 2

Servir des fichiers statiques avec Eve

servir des fichiers statiques publics avec webpack

Servir des fichiers statiques avec C++

Comment servir des fichiers statiques sur HTTPS

Servir des fichiers HTML statiques dans Apache

Servir des fichiers statiques dans elastick bestalk

Comment servir les fichiers statiques dans reactjs?

Comment obtenir apache pour servir des fichiers statiques sur la webapp Flask

Servir des fichiers statiques dans Flask à partir d'un compartiment AWS S3 privé

Servir des fichiers statiques sur une URL avec des paramètres dans Express

Comment servir des ressources statiques dans Yada

Comment servir des fichiers statiques sans tenir compte de la casse avec nginx?

Comment servir des fichiers HTML statiques (ou dynamiques?) Avec l'API RESTful?

Comment puis-je servir des fichiers statiques avec la redirection 404 par PM2?

Pourquoi ne pas servir des fichiers statiques avec Django dans un environnement de production?

Servir des fichiers statiques avec nginx situé dans un autre conteneur Docker

Comment servir des fichiers statiques dans mon application Web sur Tomcat

Comment servir des fichiers statiques dans Django 2. * quand DEBUG = False?

Comment servir des fichiers statiques dans nginx conditionnellement en fonction de la réponse du proxy?

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    comment obtenir un objet de requête dans les tests unitaires de django?

  3. 3

    mongo kafka connect source

  4. 4

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  5. 5

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  6. 6

    Comment ajouter un texte dans un texte Python/Tkinter

  7. 7

    Aide de variable de débogage pprint jinja2

  8. 8

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  9. 9

    Impression de la longueur du chemin le plus court dans le labyrinthe

  10. 10

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  11. 11

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  12. 12

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  13. 13

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  14. 14

    définir une propriété pour chaque nœud dans neo4j

  15. 15

    Pourquoi cette requête Java échoue-t-elle? renvoyer 0 quand il y a des résultats

  16. 16

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  17. 17

    Laravel 8: Attempt to read property "id" on null

  18. 18

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  19. 19

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  20. 20

    Microsoft.WebApplication.targets

  21. 21

    obtenir le nombre de marqueur affiché sur la carte

chaudétiquette

Archive