But: rassembler dans un même dossier les blueprints, les modèles, les templates nécessaire à une unité logique de l'application, et appeler ça un “module”.
Par exemple, une application peut être divisée en plusieurs “modules” :
/mywebsite /app /modules /articles # module "Articles" /models # modèles du module /static # assets du module (images, css, etc) /templates # templates du module articles.py # code du module /main # module "Main" /models # modèles du module /static # assets du module (images, css, etc) /templates # templates du module main.py # code du module /users # module "Users" /models # modèles du module /static # assets du module (images, css, etc) /templates # templates du module users.py # code du module /static # assets de base de l'application /bootstap /chartjs /css styles.css /img /js /templates # templates de base de l'application base.html.j2 __init__.py # code principal de l'application /venv .env
from flask import Flask from app.modules.articles.articles import articles from app.modules.main.main import main from app.modules.users.users import users app = Flask(__name__) app.register_blueprint(articles, url_prefix='/articles') app.register_blueprint(main, url_prefix='/') app.register_blueprint(users, url_prefix='/users')
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> {% block meta %}{% endblock %} {% block css %}{% endblock %} </head> <body> <h1>Test</h1> {% block content %}{% endblock %} {% block js %}{% endblock %} </body> </html>
from flask import Blueprint from flask import render_template main = Blueprint("main", __name__, static_folder="static", template_folder="templates" ) @main.route("/", methods=['GET']) def home(): return render_template("main.home.html.j2")
from flask import Blueprint from flask import render_template articles = Blueprint("articles", __name__, static_folder="static", template_folder="templates" ) @articles.route("/", methods=['GET']) def home(): return render_template("articles.home.html.j2")