CRUDkit fixes and changes.

This commit is contained in:
Yaro Kasear 2025-09-10 09:18:31 -05:00
parent 9d36d600bb
commit 7ddfe084ba
5 changed files with 98 additions and 43 deletions

View file

@ -1,7 +1,9 @@
import os
from flask import current_app
from jinja2 import Environment, FileSystemLoader, ChoiceLoader
from sqlalchemy.orm import class_mapper, RelationshipProperty
from flask import current_app
import os
from typing import List
def get_env():
app_loader = current_app.jinja_loader
@ -32,10 +34,15 @@ def render_field(field, value):
options=field.get('options', None)
)
def render_table(objects):
def render_table(objects, headers: List[str] | None = None):
env = get_env()
template = get_crudkit_template(env, 'table.html')
return template.render(objects=objects)
if not objects:
return template.render(fields=[], rows=[])
proj = getattr(objects[0], "__crudkit_projection__", None)
rows = [obj.as_dict(proj) for obj in objects]
fields = list(rows[0].keys())
return template.render(fields=fields, rows=rows, headers=headers)
def render_form(model_cls, values, session=None):
env = get_env()

View file

@ -1,12 +1,20 @@
<table>
{% if objects %}
{% if rows %}
<thead>
<tr>
{% for field in objects[0].__table__.columns %}<th>{{ field.name }}</th>{% endfor %}
{% if headers %}
{% for header in headers %}<th>{{ header }}</th>{% endfor %}
{% else %}
{% for field in fields if field != "id" %}<th>{{ field }}</th>{% endfor %}
{% endif %}
</tr>
{% for obj in objects %}
<tr>{% for field in obj.__table__.columns %}<td>{{ obj[field.name] }}</td>{% endfor %}</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>{% for _, cell in row.items() if _ != "id" %}<td>{{ cell if cell else "-" }}</td>{% endfor %}</tr>
{% endfor %}
{% else %}
<tr><th>No data.</th></tr>
{% endif %}
{% else %}
<tr><th>No data.</th></tr>
{% endif %}
</tbody>
</table>