fix(portal): /my/orders 500 — QWeb t-value is Python not Jinja, |length is bitwise OR

orders|length in t-value parses as orders | length, not as a Jinja
length filter. orders is a sale.order recordset; the `length`
identifier resolves to None; Python evaluates
recordset | None and raises TypeError. Use len(orders) instead.

Also documents the gotcha in CLAUDE.md (rule 19) so future templates
don't reach for Jinja-style filters in t-value.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-18 00:13:33 -04:00
parent f8fc6be370
commit ab7ff3eea5
2 changed files with 2 additions and 1 deletions

View File

@@ -39,7 +39,7 @@
<!-- Odoo's portal.portal_table emits a <table class="o_portal_my_doc_table">
so we don't need to add our own id; the JS just needs a stable selector. -->
<t t-set="target" t-value="'.o_portal_my_doc_table tbody'"/>
<t t-set="result_total" t-value="orders|length if orders else 0"/>
<t t-set="result_total" t-value="len(orders) if orders else 0"/>
<t t-set="clipped" t-value="False"/>
</t>
</xpath>