[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CV44D700QY708MHNFK91RY":3,"skill-same:01M6CV44D700QY708MHNFK91RY":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6CV44D700QY708MHNFK91RY","odoo-qweb-templates",null,"Expert in Odoo QWeb templating for PDF reports, email templates, and website pages. Covers t-if, t-foreach, t-field, and report actions.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fodoo-qweb-templates\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"templates","odoo","odoo qweb templates","PDF","safe","report","website","actions","email","reports","expert","self","2026-11-10 10:12:30",false,"---\nname: odoo-qweb-templates\ndescription: \"Expert in Odoo QWeb templating for PDF reports, email templates, and website pages. Covers t-if, t-foreach, t-field, and report actions.\"\nrisk: safe\nsource: \"self\"\n---\n\n# Odoo QWeb Templates\n\n## Overview\n\nQWeb is Odoo's primary templating engine, used for PDF reports, website pages, and email templates. This skill generates correct, well-structured QWeb XML with proper directives, translation support, and report action bindings.\n\n## When to Use This Skill\n\n- Creating a custom PDF report (invoice, delivery slip, certificate).\n- Building a QWeb email template triggered by workflow actions.\n- Designing Odoo website pages with dynamic content.\n- Debugging QWeb rendering errors (`t-if`, `t-foreach` issues).\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-qweb-templates` and describe the report or template needed.\n2. **Generate**: Receive a complete `ir.actions.report` record and QWeb template.\n3. **Debug**: Paste a broken template to identify and fix rendering issues.\n\n## Examples\n\n### Example 1: Custom PDF Report\n\n```xml\n\u003C!-- Report Action -->\n\u003Crecord id=\"action_report_patient_card\" model=\"ir.actions.report\">\n    \u003Cfield name=\"name\">Patient Card\u003C\u002Ffield>\n    \u003Cfield name=\"model\">hospital.patient\u003C\u002Ffield>\n    \u003Cfield name=\"report_type\">qweb-pdf\u003C\u002Ffield>\n    \u003Cfield name=\"report_name\">hospital_management.report_patient_card\u003C\u002Ffield>\n    \u003Cfield name=\"binding_model_id\" ref=\"model_hospital_patient\"\u002F>\n\u003C\u002Frecord>\n\n\u003C!-- QWeb Template -->\n\u003Ctemplate id=\"report_patient_card\">\n    \u003Ct t-call=\"web.html_container\">\n        \u003Ct t-foreach=\"docs\" t-as=\"doc\">\n            \u003Ct t-call=\"web.external_layout\">\n                \u003Cdiv class=\"page\">\n                    \u003Ch2>Patient Card\u003C\u002Fh2>\n                    \u003Ctable class=\"table table-bordered\">\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Name:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.name\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Doctor:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.doctor_id.name\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Status:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.state\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                    \u003C\u002Ftable>\n                \u003C\u002Fdiv>\n            \u003C\u002Ft>\n        \u003C\u002Ft>\n    \u003C\u002Ft>\n\u003C\u002Ftemplate>\n```\n\n### Example 2: Conditional Rendering\n\n```xml\n\u003C!-- Show a warning block only if the patient is not confirmed -->\n\u003Ct t-if=\"doc.state == 'draft'\">\n    \u003Cdiv class=\"alert alert-warning\">\n        \u003Cstrong>Warning:\u003C\u002Fstrong> This patient has not been confirmed yet.\n    \u003C\u002Fdiv>\n\u003C\u002Ft>\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `t-field` for model fields — Odoo auto-formats dates, monetary values, and booleans correctly.\n- ✅ **Do:** Use `t-out` (Odoo 15+) for safe HTML output of non-field strings. Use `t-esc` only on Odoo 14 and below (it HTML-escapes output).\n- ✅ **Do:** Call `web.external_layout` for PDF reports to automatically include the company header, footer, and logo.\n- ✅ **Do:** Use `_lt()` (lazy translation) for translatable string literals inside Python report helpers, not inline `t-esc`.\n- ❌ **Don't:** Use raw Python expressions inside QWeb — compute values in the model or a report `_get_report_values()` helper.\n- ❌ **Don't:** Forget `t-as` when using `t-foreach`; without it, you can't access the current record in the loop body.\n- ❌ **Don't:** Use `t-esc` where you intend to render HTML content — it will escape the tags and print them as raw text.\n\n## Limitations\n\n- Does not cover **website controller routing** for dynamic QWeb pages — that requires Python `http.route` knowledge.\n- **Email template** QWeb has different variable scope than report QWeb (`object` vs `docs`) — this skill primarily focuses on PDF reports.\n- QWeb JavaScript (used in Kanban\u002FForm widgets) is a different engine; this skill covers **server-side QWeb only**.\n- Does not cover **wkhtmltopdf configuration** for PDF rendering issues (page size, margins, header\u002Ffooter overlap).\n","# Odoo QWeb Templates\n\n## Overview\n\nQWeb is Odoo's primary templating engine, used for PDF reports, website pages, and email templates. This skill generates correct, well-structured QWeb XML with proper directives, translation support, and report action bindings.\n\n## When to Use This Skill\n\n- Creating a custom PDF report (invoice, delivery slip, certificate).\n- Building a QWeb email template triggered by workflow actions.\n- Designing Odoo website pages with dynamic content.\n- Debugging QWeb rendering errors (`t-if`, `t-foreach` issues).\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-qweb-templates` and describe the report or template needed.\n2. **Generate**: Receive a complete `ir.actions.report` record and QWeb template.\n3. **Debug**: Paste a broken template to identify and fix rendering issues.\n\n## Examples\n\n### Example 1: Custom PDF Report\n\n```xml\n\u003C!-- Report Action -->\n\u003Crecord id=\"action_report_patient_card\" model=\"ir.actions.report\">\n    \u003Cfield name=\"name\">Patient Card\u003C\u002Ffield>\n    \u003Cfield name=\"model\">hospital.patient\u003C\u002Ffield>\n    \u003Cfield name=\"report_type\">qweb-pdf\u003C\u002Ffield>\n    \u003Cfield name=\"report_name\">hospital_management.report_patient_card\u003C\u002Ffield>\n    \u003Cfield name=\"binding_model_id\" ref=\"model_hospital_patient\"\u002F>\n\u003C\u002Frecord>\n\n\u003C!-- QWeb Template -->\n\u003Ctemplate id=\"report_patient_card\">\n    \u003Ct t-call=\"web.html_container\">\n        \u003Ct t-foreach=\"docs\" t-as=\"doc\">\n            \u003Ct t-call=\"web.external_layout\">\n                \u003Cdiv class=\"page\">\n                    \u003Ch2>Patient Card\u003C\u002Fh2>\n                    \u003Ctable class=\"table table-bordered\">\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Name:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.name\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Doctor:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.doctor_id.name\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                        \u003Ctr>\n                            \u003Ctd>\u003Cstrong>Status:\u003C\u002Fstrong>\u003C\u002Ftd>\n                            \u003Ctd>\u003Ct t-field=\"doc.state\"\u002F>\u003C\u002Ftd>\n                        \u003C\u002Ftr>\n                    \u003C\u002Ftable>\n                \u003C\u002Fdiv>\n            \u003C\u002Ft>\n        \u003C\u002Ft>\n    \u003C\u002Ft>\n\u003C\u002Ftemplate>\n```\n\n### Example 2: Conditional Rendering\n\n```xml\n\u003C!-- Show a warning block only if the patient is not confirmed -->\n\u003Ct t-if=\"doc.state == 'draft'\">\n    \u003Cdiv class=\"alert alert-warning\">\n        \u003Cstrong>Warning:\u003C\u002Fstrong> This patient has not been confirmed yet.\n    \u003C\u002Fdiv>\n\u003C\u002Ft>\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `t-field` for model fields — Odoo auto-formats dates, monetary values, and booleans correctly.\n- ✅ **Do:** Use `t-out` (Odoo 15+) for safe HTML output of non-field strings. Use `t-esc` only on Odoo 14 and below (it HTML-escapes output).\n- ✅ **Do:** Call `web.external_layout` for PDF reports to automatically include the company header, footer, and logo.\n- ✅ **Do:** Use `_lt()` (lazy translation) for translatable string literals inside Python report helpers, not inline `t-esc`.\n- ❌ **Don't:** Use raw Python expressions inside QWeb — compute values in the model or a report `_get_report_values()` helper.\n- ❌ **Don't:** Forget `t-as` when using `t-foreach`; without it, you can't access the current record in the loop body.\n- ❌ **Don't:** Use `t-esc` where you intend to render HTML content — it will escape the tags and print them as raw text.\n\n## Limitations\n\n- Does not cover **website controller routing** for dynamic QWeb pages — that requires Python `http.route` knowledge.\n- **Email template** QWeb has different variable scope than report QWeb (`object` vs `docs`) — this skill primarily focuses on PDF reports.\n- QWeb JavaScript (used in Kanban\u002FForm widgets) is a different engine; this skill covers **server-side QWeb only**.\n- Does not cover **wkhtmltopdf configuration** for PDF rendering issues (page size, margins, header\u002Ffooter overlap).\n",{"name":5,"risk":28,"source":35,"description":7},"main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fodoo-qweb-templates",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill odoo-qweb-templates",{"tool":55,"command":56},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill odoo-qweb-templates",{"tool":58,"command":59},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill odoo-qweb-templates","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fodoo-qweb-templates\u002FSKILL.md",true,[],[64,75,92,119,138,163],{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":72,"publishedAt":36},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[73,74],"Test Skill","test",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":36},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[82,83,84,85,86,87,88,89,90,91],"zustand store ts","zustand","store","with","types","middleware","patterns","community","create","typescript",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":101,"publishedAt":36},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[102,103,104,105,106,107,108,109,110,111,112,113,114,115,89,116,117,118],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":126,"publishedAt":36},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[125],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[127,102,128,129,130,131,132,89,107,133,115,134,112,111,106,135,90,136,108,137],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":36},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[34,148,149,150,151,91,28,152,153,154,155,156,85,157,158,159,160,89,161,162],"zod","zod validation expert","validation","react","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":170,"publishedAt":36},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[169],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[171,172,173,174,175,176,177,178,89,179,180,181,182,183,184,185,186,187,188,108],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]