本技能用于判断在 ERPNext/Frappe 中“如何实现”Jinja 模板,而非讲确切语法(语法见 erpnext-syntax-jinja)。兼容 v14/v15/v16,并标注 V16 专属特性。
用途与选择:根据目标选择载体——可打印文档走打印格式:标准 DocType 用 Print Format(Jinja),查询/脚本报表用 Report Print Format(JavaScript 模板,禁止用 Jinja);自动化邮件走 Email Template;面向客户的网页走 Portal Page(www/*.html + *.py);可复用的方法/过滤器在 hooks.py 中通过 jenv 注册;通知内容使用 Notification Template。
主要能力与用法:打印格式可在 Setup > Printing > Print Format 新建,简单版用 Print Format Builder,复杂版用自定义 HTML + Jinja + CSS。邮件模板在 Setup > Email > Email Template 新建,可用 frappe.sendmail 与 frappe.render_template 调用。门户页在 myapp/www/ 下放置 index.html 与 index.py,通过 get_context(context) 提供上下文。自定义方法与过滤器在 hooks.py 的 jenv 中注册 methods 与 filters,部署执行 bench --site sitename migrate。
限制与规则:显示值须用 doc.get_formatted("字段");子表行须传父文档 row.get_formatted("字段", doc);用户可见文本用 _("文本") 翻译;报表打印格式必须用 JavaScript({%= %}、{% %}),不可用 Jinja;避免在循环中查询造成 N+1。V16 起 PDF 由 wkhtmltopdf 转向 Chrome PDF。更多内容见 decision-tree.md、workflows.md、examples.md、anti-patterns.md。