URL-адрес OpenERP @http.route('demo_json', type=json) не отображает данные JSON

Я создаю контроллер в OpenERP Framework. Ниже приведен мой код, и я установил http.route type="http",

import openerp.http as http
from openerp.http import request

class MyController(http.Controller):

    @http.route('demo_html', type="http")
    def some_html(self):
        return "<h1>This is a test</h1>"

Приведенный выше код работает отлично, как только я вхожу в openerp после того, как я изменяю URL-адрес http://localhost:8069/demo_html, покажите мне результат возврата This is a test в теге заголовка h1.

Но так же я пытаюсь type="json" и добавляю следующий код json и снова пытаюсь вызвать URL-адрес http://localhost:8069/demo_json. Он не работает должным образом и показывает мне ошибку "Internal Server Error".

import openerp.http as http
from openerp.http import request

class MyController(http.Controller):

    @http.route('demo_html', type="http") // Work Pefrect when I call this URL
    def some_html(self):
        return "<h1>This is a test</h1>"

    @http.route('demo_json', type="json") // Not working when I call this URL
    def some_json(self):
        return {"sample_dictionary": "This is a sample JSON dictionary"}

Итак, мой вопрос заключается в том, как направить json. Любая помощь будет оценена Спасибо.


person Jay Patel    schedule 01.04.2014    source источник


Ответы (2)


Это потому, что между type="json" и type="http" есть разница.

type="json":

it will call JSONRPC as an argument to http.route() so here , there will be only JSON data be able to pass via JSONRPC, It will only accept json data object as argument. 

type="http":

As compred to JSON, http will pass http request arguments to http.route() not json data.
person Bazzinga...    schedule 01.04.2014
comment
вы проверяете, я возвращаю данные JSON, возвращаю {sample_dictionary: это пример словаря JSON} - person Jay Patel; 01.04.2014

Я думаю, вам нужно сделать некоторые дополнительные вещи при работе с type="json", вы должны запустить этот метод, используя json rpc из js.

like :
$(document).ready(function () {
    openerp.jsonRpc("demo_json", 'call', {})
            .then(function (data) {
                $('body').append(data[0]);
            });
    return;
})

и да не забудьте вернуть свой словарь в список типа

@http.route('demo_json', type="json")
def some_json(self):
    return [{"sample_dictionary": "This is a sample JSON dictionary"}]
person Heroic    schedule 03.04.2014
comment
Спасибо, что дали мне ответ. Вызов кода jquery в теге заголовка страницы demo_json внутри, который я добавляю. другие вещи, насколько мне известно, JSON возвращает формат словаря для отображения на странице - person Jay Patel; 03.04.2014
comment
Да, вы правы, JSON возвращает словарь, но он также возвращает список словарей, вы можете проверить jsonlint.com и ввести что-нибудь например [{}] и подтвердите. - person Heroic; 03.04.2014
comment
@S͢kyD͢ream, вашему вопросу уже 3 года, но сегодня, в 2017 году, я хочу вернуть Json? Как вызвать demo_json из url и куда положить выше jquery? - person Pointer; 17.02.2017
comment
@Pointer мы не можем обновить базу вопросов в новом обновлении Odoo. Если у вас есть вопрос, задайте его здесь, свяжитесь со мной напрямую. Спасибо - person Jay Patel; 23.02.2017