fix(content): add missing datetimeformat filter; move preview column first
- Add _datetimeformat Jinja2 filter to _render_pattern() — templates
use {{ 'now' | datetimeformat('%Y') }} but the filter was never
registered, causing "No filter named 'datetimeformat'" on preview.
- Move Preview button to first column in template detail data table
so it's visible without scrolling on wide tables.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -81,24 +81,24 @@
|
||||
<table class="table text-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
{% for col in columns %}
|
||||
<th>{{ col.name }}</th>
|
||||
{% endfor %}
|
||||
<th>Preview</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in sample_rows %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ url_for('admin.template_preview', slug=config_data.slug, row_key=row[config_data.natural_key]) }}"
|
||||
class="btn-outline btn-sm">Preview</a>
|
||||
</td>
|
||||
{% for col in columns %}
|
||||
<td class="mono" style="max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap">
|
||||
{{ row[col.name] }}
|
||||
</td>
|
||||
{% endfor %}
|
||||
<td>
|
||||
<a href="{{ url_for('admin.template_preview', slug=config_data.slug, row_key=row[config_data.natural_key]) }}"
|
||||
class="btn-outline btn-sm">Preview</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -133,10 +133,22 @@ def _validate_table_name(data_table: str) -> None:
|
||||
|
||||
# ── Rendering helpers ────────────────────────────────────────────────────────
|
||||
|
||||
def _datetimeformat(value: str, fmt: str = "%Y-%m-%d") -> str:
|
||||
"""Jinja2 filter: format a date string (or 'now') with strftime."""
|
||||
from datetime import datetime, UTC
|
||||
|
||||
if value == "now":
|
||||
dt = datetime.now(UTC)
|
||||
else:
|
||||
dt = datetime.fromisoformat(value)
|
||||
return dt.strftime(fmt)
|
||||
|
||||
|
||||
def _render_pattern(pattern: str, context: dict) -> str:
|
||||
"""Render a Jinja2 pattern string with context variables."""
|
||||
env = Environment()
|
||||
env.filters["slugify"] = slugify
|
||||
env.filters["datetimeformat"] = _datetimeformat
|
||||
return env.from_string(pattern).render(**context)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user