====== Conception par modules ====== 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//" : * main * articles * forum * users * ... etc ... ===== Arboresence ===== /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 ===== Base de l'application ===== ==== /app/__init__.py ==== 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') ==== /app/templates/base.html.j2 ==== {% block meta %}{% endblock %} {% block css %}{% endblock %}

Test

{% block content %}{% endblock %} {% block js %}{% endblock %}
===== Module "Main" ===== ==== /app/modules/main/main.py ==== 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") ==== /app/modules/main/templates/main.home.html.j2 ==== {% extends 'base.html.j2' %} {% block content %}

Module main : home

{% endblock %}
===== Module "Articles" ===== ==== /app/modules/articles/articles.py ==== 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") ==== /app/modules/articles/templates/articles.home.html.j2 ==== {% extends 'base.html.j2' %} {% block content %}

Module articles : home

{% endblock %}