如何将静态文件夹添加到我的 Odoo 自定义模块?

How to add a static folder to my Odoo custom Module?

如何添加静态文件夹,其中包含一些 SOAP 客户端 所需的 wsdl 和 xsd 文件,以及它到我的 Odoo 11 自定义模块的相关路径?

------------更新--------

我在我的模块中创建了一个静态文件夹,其中包含我想要的文件的 src 文件夹。需要从我的控制器访问这些文件,正确的完整路径是什么?我应该在使用之前在任何地方添加路径吗?

这是我的控制器,我正在尝试使用这些文件:

检查给客户端的路径(zeep_test/static/src/uhud/Uhud.wsdl)

from zeep import Client, Settings, xsd
import datetime
from odoo import http
from lxml.etree import tostring

class WaseelCrm(http.Controller):
   @http.route('/test/zeep', type='json', methods=['POST'], auth="public", website=True, csrf=False)
   def test_zeep(self):
       settings = Settings(strict=False, xml_huge_tree=True)
       client = Client('zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)

       factory = client.type_factory('ns0')

       transaction = factory.TransactionCT('1.1', 'NEW', None, None, 'REQUEST')
       user = factory.UserCT('admin', 'admin', 'Ahmed Yasser')
       interaction = factory.InteractionCT(None, 102, 2260, 101)

       timestamp = datetime.datetime.combine(datetime.datetime.now(), datetime.time(10, 23))

       cmh = factory.MessageHeaderCT(transaction, interaction, user, timestamp)

       member = factory.MemberCT('0020693108', '20693101', '158')
       visitInfo = factory.visitInfoCT(timestamp, 7, 'NEW')
       eligibilityRequest = factory.EligibilitySubmissionRequestCT(member, visitInfo)

       with client.settings(raw_response=False):
           response = client.service.submitSchema(CommonMessageHeader=cmh,
                                                  EligibilitySubmissionRequest=eligibilityRequest)

       return response

这是这些文件存在的地方 Folder's Path

您可以构建一个 Odoo 模块并将静态 wsdl 和 xsd 包含在名为 static 的模块文件夹中。您可以从这些资源中找到有关创建模块的更多信息和帮助:

创建模块时,如果您无法从 Odoo 参考资源中找到特定编程挑战的答案,请考虑在 Stack Overflow 中提问。对于 Stack Overflow 问题,请提供带有问题的准确且可重现的代码,以便人们可以最好地帮助您。您可以在 https://whosebug.com/help/how-to-ask 找到有关好问题的说明。欢迎来到 Zatar,Stack Overflow。

感谢您用更具体的细节和代码更新问题。您正在尝试从 Odoo Python 代码访问 wsdl,而不是外部作为 Odoo 发布的静态 http 内容。

我看到你有四种可能的方法来解决这个问题:

  1. 使用相对路径访问 wsdl 并修改您的代码以使其成为可能。这是首选方式。此代码在控制器中工作,或在模块根目录下一级的任何其他目录中的 python 代码中工作。

    wsdlpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../zeep_test/static/src/uhud/Uhud.wsdl')
    client = Client(wsdlpath, settings=settings)
    
  2. 使用绝对路径访问wsdl。更新您的代码以在 zeep 客户端调用中包含完整的绝对路径。在此选项中,您需要对绝对路径进行硬编码。这有效但不好。

    client = Client('/mnt/extra-addons/zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)
    
  3. 使用http地址通过Odoo http服务访问wsdl。在此解决方案中,您需要在 Odoo 服务器看到它时对您的 Odoo 地址进行硬编码。

    client = Client('http://localhost:8069/zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)
    
  4. 直接从 SOAP 服务提供商访问 wsdl。有了这个,您需要从服务提供商处访问 wsdl。这样你就不需要本地的 wsdl。

    client = Client('https://serviceprovider.com/xx/yy/Uhud.wsdl', settings=settings)
    

目前您的 wsdl 位于一个公开可用的静态文件夹中。你真的想在你的 Odoo 中发布这个吗?如果您没有特别的意图,我会考虑不发布此内容。如果您使用内部地址从代码中引用此文件(案例 1 和案例 2),则无需发布它。