Templates 从模板odoo8调用python函数

Templates 从模板odoo8调用python函数,templates,controller,web,odoo-8,qweb,Templates,Controller,Web,Odoo 8,Qweb,在我的控制器类中有一个函数,我需要在我的一个模板中调用该函数。我试过这个: controller.py class MyController(http.Controller): @http.route(["/myPath/"], type='http', auth="public", website=True) def myfucntion(self): -- something --- def thisMethod(self): I ne

在我的控制器类中有一个函数,我需要在我的一个模板中调用该函数。我试过这个:

controller.py

class MyController(http.Controller):
    @http.route(["/myPath/"], type='http', auth="public", website=True)
    def myfucntion(self):
        -- something ---
    def thisMethod(self):
        I need to call this methd in remplate
template.xml

<t t-esc="thisMethod()"/>
thiMethod()


如何调用此方法?

据我所知,您实际上并没有使用t-esc语法从模板调用此方法。您可以在控制器中创建方法,这些方法可以通过post或get请求访问。如果希望,可以使用javascript从模板中发出这些请求,或者通过标记将javascript文件包含在模板中。如果脚本很简单,那么就可以使用内联javascript

  <script>console.log("Hello World")</script> 
使用上面描述的方法之一(简要地)放置此javascript以在模板中调用该方法

        <script>
        jQuery.get('/test/http/method/',function(data){ console.log( "HTTP RESPONSE: " + data ) });
        </script>
        <script>
    jQuery.ajax({
        type: "POST",
        url: '/test/json/method/',
        dataType: 'json',
        async: true,
        data: JSON.stringify({}),
        contentType: "application/json; charset=utf-8",
        success: function ( data ) {
           console.log( "JSON RESPONSE: " + JSON.stringify( data ) );
        },
        failure: function( data ){
           console.log( JSON.stringify( data ) );
        }
    })
    </script>

get('/test/http/method/',函数(数据){console.log(“http响应:+data)});
jQuery.ajax({
类型:“POST”,
url:“/test/json/method/”,
数据类型:“json”,
async:true,
数据:JSON.stringify({}),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
log(“JSON响应:+JSON.stringify(数据));
},
故障:功能(数据){
log(JSON.stringify(data));
}
})
在奥多的路线选择上,有很多东西需要学习。存在安全问题和权限问题,您应该小心


讨论一些概念的快速概述。讨论控制器。涵盖javascript。除此之外,请查看控制器目录中的web、网站插件以了解更多示例。

据我所知,您实际上没有使用t-esc语法从模板调用该方法。您可以在控制器中创建方法,这些方法可以通过post或get请求访问。如果希望,可以使用javascript从模板中发出这些请求,或者通过标记将javascript文件包含在模板中。如果脚本很简单,那么就可以使用内联javascript

  <script>console.log("Hello World")</script> 
使用上面描述的方法之一(简要地)放置此javascript以在模板中调用该方法

        <script>
        jQuery.get('/test/http/method/',function(data){ console.log( "HTTP RESPONSE: " + data ) });
        </script>
        <script>
    jQuery.ajax({
        type: "POST",
        url: '/test/json/method/',
        dataType: 'json',
        async: true,
        data: JSON.stringify({}),
        contentType: "application/json; charset=utf-8",
        success: function ( data ) {
           console.log( "JSON RESPONSE: " + JSON.stringify( data ) );
        },
        failure: function( data ){
           console.log( JSON.stringify( data ) );
        }
    })
    </script>

get('/test/http/method/',函数(数据){console.log(“http响应:+data)});
jQuery.ajax({
类型:“POST”,
url:“/test/json/method/”,
数据类型:“json”,
async:true,
数据:JSON.stringify({}),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
log(“JSON响应:+JSON.stringify(数据));
},
故障:功能(数据){
log(JSON.stringify(data));
}
})
在奥多的路线选择上,有很多东西需要学习。存在安全问题和权限问题,您应该小心


讨论一些概念的快速概述。讨论控制器。涵盖javascript。除此之外,请在web上查看控制器目录中的网站插件以获取更多示例。

您必须提供一个实例:
someinstance.thisMethod()
如何为控制器类创建对象?您必须提供一个实例:
someinstance.thisMethod()
如何为控制器类创建对象?
    @http.route('/test/json/method/', auth='none', type='json', website=True)
    def test_json(self):
        #YOUR CODE HERE 
        return json.dumps({'json':True})

    @http.route('/test/http/method/', auth='none', type='http', website=True)
    def test_http(self):
        #YOUR CODE HERE
        return json.dumps({'http':True})
        <script>
        jQuery.get('/test/http/method/',function(data){ console.log( "HTTP RESPONSE: " + data ) });
        </script>
        <script>
    jQuery.ajax({
        type: "POST",
        url: '/test/json/method/',
        dataType: 'json',
        async: true,
        data: JSON.stringify({}),
        contentType: "application/json; charset=utf-8",
        success: function ( data ) {
           console.log( "JSON RESPONSE: " + JSON.stringify( data ) );
        },
        failure: function( data ){
           console.log( JSON.stringify( data ) );
        }
    })
    </script>