2016-08-19 4 views
1

В моем классе контроллера есть функция, мне нужно вызвать эту функцию в одном из моих шаблонов. я попытался это:Вызвать функцию python из шаблона odoo 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 в свой шаблон с помощью тега. Если сценарий просто вы могли бы, вероятно, уйти с инлайн Javascript

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

В противном случае вы можете указать на файл JS в вашем статическом каталоге, как это.

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

У Odoo однако есть некоторые правила для включения js. Если вы используете Odoo CMS в качестве родительского шаблона для вашего шаблона Qweb, вы также можете использовать xpath для размещения вашего js-файла со всеми остальными файлами js Odoo.

<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 вещи становятся (возможно) более сложным, как вам нужно использовать синтаксис требует JS использовать почтовые запросы в вашем js.Here является упрощенным примером, который должен работать в Odoo8. Для Odoo9 посмотрите код для других примеров, используя 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. Кроме этого, посмотрите на веб-сайт, аддоны веб-сайтов в каталогах контроллеров для получения дополнительных примеров.

Смежные вопросы