我的控制器类中有一个函数,我需要在我的一个模板中调用该函数。我试过这个:
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()"/>
获取错误:
QWebException: "'NoneType' object is not callable" while evaluating
thiMethod()
如何调用此方法?
答案 0 :(得分:0)
据我了解,您实际上并没有使用t-esc语法从模板中调用该方法。您可以做的是在控制器中创建可通过post或get请求访问的方法。如果您愿意,可以使用javascript通过模板发出这些请求,或者通过标记在模板中包含javascript文件。如果脚本很简单,你可能会使用内联javascript
<script>console.log("Hello World")</script>
否则,您可以像这样指向静态目录中的js文件。
<script src="/<module>/static/main.js"></script>
然而,Odoo有一些包含js的规则。如果您使用Odoo CMS作为Qweb模板的父模板,那么您可能还希望使用xpath将js文件与其余所有Odoo的js文件放在一起。
<template id="my_js" inherit_id="website.assets_frontend" name="My Js">
<xpath expr="script[last()]" position="after">
<script type="text/javascript" src="/<module>/static/main.js" />
</xpath>
</template>
在Odoo9中,事情变得(可能)更复杂,因为你需要使用require js语法在你的js中使用post请求。这是一个过于简单的例子,应该在Odoo8中工作。对于Odoo9,请查看使用require js的其他示例的代码。
这是一些控制器方法,一个是json,另一个是http。将代码放在适合您的代码中。您可以选择返回更合适的内容(如某些数据)但True或False表示成功或失败可能就足够了。
@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})
使用上述方法之一(简要地)将此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>
在Odoo中进行路由时需要学习很多东西。存在安全问题,权限问题,您应该小心。
https://www.odoo.com/documentation/8.0/howtos/website.html讨论了一些概念的快速概述。 https://www.odoo.com/documentation/8.0/reference/http.html讨论控制器。 https://www.odoo.com/documentation/8.0/reference/javascript.html涵盖了javascript。除此之外,请查看网页,控制器目录中的网站插件以获取更多示例。