2016-08-19 13 views
1

コントローラクラスに関数があります。テンプレートの1つでその関数を呼び出す必要があります。私はこの試みた:テンプレートodooからPython関数を呼び出します。8

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

インスタンスを用意する必要があります: 'someinstance.thisMethod()' –

+0

コントローラクラスのオブジェクトを作成するにはどうしたらいいですか? – KbiR

答えて

0

実際にt-esc構文を使用してテンプレートからメソッドを呼び出すことはありません。あなたができることは、あなたのコントローラーに投稿を通してアクセス可能なメソッドを作成したり、リクエストを得ることです。タグでテンプレートにjavascriptファイルを含めたい場合は、javascriptを使用してテンプレートを使用してこれらの要求を行うことができます。スクリプトがシンプルである場合、あなたはおそらく

<script>console.log("Hello World")</script> 

は、そうでなければ、あなたがこのような静的なディレクトリ内のjsファイルを指すことができますjavascriptのインラインで逃げることができました。

<script src="/<module>/static/main.js"></script> 

Odooただし、jsを含めるためのいくつかのルールがあります。 Odwe CMSをQwebテンプレートの親テンプレートとして使用している場合、xpathを使用してjsファイルを残りのすべてのOdooのjsファイルに配置することもできます。あなたはjs.Here内POSTリクエストを使用する構文JSを必要と使用する必要があるとしてOdoo9もので

<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> 

は(おそらく)より複雑になるOdoo8で動作するはず単純化しすぎの例です。 Odoo9については、require jsを使用した他の例のコードを見てください。

ここにいくつかのコントローラメソッド、1つのjson、もう1つの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}) 

上記の方法の1つ(簡単に説明)を使用してこの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をカバーしています。それ以外のWebサイト、コントローラのディレクトリにあるWebサイトのアドオンを参考にしてください。

関連する問題