mcpField
O
odoo-qweb-templates

odoo-qweb-templates

github.com/sickn33開発48.7k62 回インストール今日更新
リポジトリ

odoo-qweb-templates について

サーバー側のOdoo QWebテンプレートを作成・デバッグするスキルで、主にPDFレポートを対象とします。ディレクティブ、翻訳対応、レポートアクションのバインディングを備えたXML作成を支援します。

主な機能

  1. 01QWeb XMLテンプレートの生成
  2. 02PDFレポートアクションのバインディング作成
  3. 03レンダリングディレクティブのデバッグ
  4. 04フィールド書式と出力エスケープの適用
  5. 05レポート文字列の翻訳対応

活用シーン

  1. 01請求書や納品書レポートの作成
  2. 02ワークフロー起動メールテンプレートの構築
  3. 03動的コンテンツを含むウェブページの設計
  4. 04t-ifやt-foreachのレンダリング問題の修正

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill odoo-qweb-templates

インストール後、Claude Code で/odoo-qweb-templatesを入力して読み込まれたか確認します。

詳細

Odoo QWeb テンプレート

概要

QWeb は Odoo の主要なテンプレートエンジンで、PDF レポート、ウェブサイトのページ、メールテンプレートに使用されます。このスキルでは、適切なディレクティブ、翻訳サポート、レポートアクションとのバインドを備えた、正しく構造化された QWeb XML を生成します。

このスキルを使用する場面

  • カスタム PDF レポート(請求書、納品書、証明書)を作成する。
  • ワークフローアクションによって呼び出される QWeb メールテンプレートを構築する。
  • 動的コンテンツを含む Odoo ウェブサイトのページを設計する。
  • QWeb のレンダリングエラー(t-if、t-foreach の問題)をデバッグする。

仕組み

  1. 有効化:@odoo-qweb-templates に言及し、必要なレポートまたはテンプレートを説明します。
  2. 生成:完全な ir.actions.report レコードと QWeb テンプレートを受け取ります。
  3. デバッグ:問題のあるテンプレートを貼り付けて、レンダリングの問題を特定し、修正します。

例

例 1:カスタム PDF レポート

<record id="action_report_patient_card" model="ir.actions.report">
    <field name="name">Patient Card</field>
    <field name="model">hospital.patient</field>
    <field name="report_type">qweb-pdf</field>
    <field name="report_name">hospital_management.report_patient_card</field>
    <field name="binding_model_id" ref="model_hospital_patient"/>
</record>


<template id="report_patient_card">
    <t t-call="web.html_container">
        <t t-foreach="docs" t-as="doc">
            <t t-call="web.external_layout">
                <div class="page">
                    <h2>Patient Card</h2>
                    <table class="table table-bordered">
                        <tr>
                            <td><strong>Name:</strong></td>
                            <td><t t-field="doc.name"/></td>
                        </tr>
                        <tr>
                            <td><strong>Doctor:</strong></td>
                            <td><t t-field="doc.doctor_id.name"/></td>
                        </tr>
                        <tr>
                            <td><strong>Status:</strong></td>
                            <td><t t-field="doc.state"/></td>
                        </tr>
                    </table>
                </div>
            </t>
        </t>
    </t>
</template>
例 2:条件付きレンダリング

<t t-if="doc.state == 'draft'">
    <div class="alert alert-warning">
        <strong>Warning:</strong> This patient has not been confirmed yet.
    </div>
</t>

ベストプラクティス

  • ✅ 推奨: モデルのフィールドには t-field を使用します。Odoo が日付、金額、ブール値を適切に自動フォーマットします。
  • ✅ 推奨: 通常の文字列をエスケープして出力するには t-out を使用します。Odoo 17 では t-esc も引き続きエイリアスとして使用できます。すでに安全とマークされている値については、別途信頼性を確認してください。
  • ✅ 推奨: PDF レポートでは web.external_layout を呼び出し、会社のヘッダー、フッター、ロゴを自動的に含めます。
  • ✅ 推奨: Python のレポートヘルパー内で翻訳可能な文字列リテラルを使う場合は、インラインの t-esc ではなく _lt()(遅延翻訳)を使用します。
  • ❌ 非推奨: QWeb に複雑なビジネスロジックや副作用を含めないでください。単純な式は使用できますが、複雑な値はモデルまたはレポートの _get_report_values() ヘルパーで計算してください。
  • ❌ 非推奨: t-foreach を使用する際に t-as を忘れないでください。指定しないと、ループ本体で現在のレコードにアクセスできません。
  • ❌ 非推奨: 信頼できない HTML をレンダリングするためにエスケープを回避しないでください。リッチコンテンツは、対象の Odoo バージョンでサポートされている仕組みを使ってサニタイズしてください。コンテンツを安全とマークすることは、セキュリティ上の判断を伴います。

参考資料:Odoo 17 QWeb。このサンプルには、カスタムモデル、フィールド、アクセスルール、モジュールの XML ラッパーが必要です。権限を持つユーザーでレンダリングをテストし、患者データの公開は避けてください。

制限事項

  • 動的な QWeb ページのウェブサイトコントローラーのルーティングには対応していません。Python の http.route に関する知識が必要です。
  • メールテンプレートの QWeb は、レポート用 QWeb とは変数のスコープ(object と docs)が異なります。このスキルは主に PDF レポートを対象としています。
  • QWeb JavaScript(Kanban/Form ウィジェットで使用)は別のエンジンです。このスキルではサーバーサイド QWeb のみを対象としています。
  • PDF レンダリングの問題(ページサイズ、余白、ヘッダーとフッターの重なり)に関する wkhtmltopdf の設定には対応していません。

コメント