From 699a866a216c671592badd6cab95dea8bdde6f6d Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Tue, 2 Sep 2025 15:28:42 -0500 Subject: [PATCH] Granular replacement of fragments! --- crudkit/ui/fragments.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/crudkit/ui/fragments.py b/crudkit/ui/fragments.py index ec1bd0c..d30e24b 100644 --- a/crudkit/ui/fragments.py +++ b/crudkit/ui/fragments.py @@ -1,13 +1,29 @@ -from jinja2 import Environment, FileSystemLoader +from jinja2 import Environment, FileSystemLoader, ChoiceLoader from sqlalchemy.orm import class_mapper, RelationshipProperty +from flask import current_app import os -FRAGMENT_PATH = os.path.join(os.path.dirname(__file__), 'templates') -env = Environment(loader=FileSystemLoader(FRAGMENT_PATH)) +def get_env(): + app_loader = current_app.jinja_loader + + default_path = os.path.join(os.path.dirname(__file__), 'templates') + fallback_loader = FileSystemLoader(default_path) + + env = Environment(loader=ChoiceLoader([ + app_loader, + fallback_loader + ])) + return env + +def get_crudkit_template(env, name): + try: + return env.get_template(f'crudkit/{name}') + except Exception: + return env.get_template(name) def render_field(field, value): - print(field) - template = env.get_template('field.html') + env = get_env() + template = get_crudkit_template(env, 'field.html') return template.render( field_name=field['name'], field_label=field.get('label', field['name']), @@ -16,13 +32,14 @@ def render_field(field, value): options=field.get('options', None) ) - def render_table(objects): - template = env.get_template('table.html') + env = get_env() + template = get_crudkit_template(env, 'table.html') return template.render(objects=objects) def render_form(model_cls, values, session=None): - template = env.get_template('form.html') + env = get_env() + template = get_crudkit_template(env, 'form.html') fields = [] fk_fields = set()