odoo动态生成的CSS伪装成静态的一个例子

admin 2020-8-10 13840


odoo动态生成的CSS伪装成静态的一个例子:

odoo是高度配置化的一个系统,包括很多静态资源(CSS、JavaScript等)都可以动态配置。比如报表模板中可以配置部分字体颜色,而配置的字体颜色并非写入css/scss 文件,而是存入数据库,然后伪装成一个静态文件的URL。


报表模板字体颜色配置的记录保存在 ir_attachment 表中,定义的代码在:

/source/odoo/addons/web/data/report_layout.xml文件中:

<record id="asset_styles_company_report" model="ir.attachment">
  <field name="datas" model="res.company" eval="obj()._get_asset_style_b64()"/>
  <field name="mimetype">text/scss</field>
  <field name="name">res.company.scss</field>
  <field name="type">binary</field>
  <field name="url">/web/static/src/scss/asset_styles_company_report.scss</field>
</record>

这个资源伪装成静态URL: 

/web/static/src/scss/asset_styles_company_report.scss

而引用这个假静态资源的地方在:

/source/odoo/addons/web/views/report_templates.xml 文件中:

<template id="report_assets_common">
  <t t-call="web._assets_helpers">
  <!-- FIXME web_editor ? -->
    <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bootstrap_overridden_report.scss"/>
    <link rel="stylesheet" type="text/scss" href="/web_editor/static/src/scss/bootstrap_overridden.scss"/>
  </t>
  <t t-call="web._assets_bootstrap"/>
  <link href="/base/static/src/css/description.css" rel="stylesheet" type="text/css"/>
  <!-- FIXME web_editor ? -->
  <link rel="stylesheet" type="text/scss" href="/web_editor/static/src/scss/web_editor.common.scss"/>
  <link href="/web/static/lib/fontawesome/css/font-awesome.css" rel="stylesheet" type="text/css"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/fonts.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/report.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/layout_standard.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/layout_background.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/layout_boxed.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/layout_clean.scss"/>
  <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/asset_styles_company_report.scss"/><!--这里调用伪静态资源-->
  <script type="text/javascript" src="/web/static/src/js/services/session.js"/>
  <script type="text/javascript" src="/web/static/src/js/public/public_root.js"/>
  <script type="text/javascript" src="/web/static/src/js/public/public_root_instance.js"/>
  <script type="text/javascript" src="/web/static/src/js/public/public_widget.js"/>
  <script type="text/javascript" src="/web/static/src/js/report/utils.js"/>
  <script type="text/javascript" src='/web/static/src/js/report/report.js' />
</template>

这也给我们一个思路,在某些场景下把静态资源存入数据库中


最新回复 (0)
返回