Ajax в данные Python Pyramid

До сих пор мне удавалось взять кучу элементов HTML, для которых атрибут contentEditable имеет значение True, и объединить их идентификаторы и данные HTML вместе, чтобы создать строку данных Ajax. Я могу вернуть сериализованные данные на сервер без проблем. Например,

$(document).ready(function(){
    $("#save").click(function(){
        var ajax_string = ''
        $( "[contenteditable=True]" ).each(function( intIndex ){
            ajax_string = ajax_string + '&' + $("[contenteditable=True]")[intIndex].id + ':' + $(this).html();
        });
        $.ajax({
            type:"POST",
            url:"/episode_edit/{{ episode.ID_Episode }}",
            data:ajax_string,
            success:function(result){
                <!--alert( ajax_string );-->
                }
        });
    });
});

На сервере:

for r in request.params: print r

Я получаю строки:

AltTitle:some Alt Title
PrintTitle:The Print Title
Notes:A bunch o' notes.

Теперь моя дилемма заключается в том, что мне нужно преобразовать каждую строку request.param в объект словаря, чтобы я мог сопоставить ее обратно с моей моделью базы данных. Я могу придумать несколько очень уродливых способов сделать это, но каков наилучший способ?


person MFB    schedule 07.06.2011    source источник
comment
Это потому, что ты делаешь это неправильно. Вы должны отправлять свои данные как обычное application/x-www-form-urlencoded. Это url?key1=value1&key2=value2. Не URL?ключ1:значение1&ключ2:значение2.   -  person Antoine Leclair    schedule 07.06.2011
comment
Спасибо, Антуан, но, к сожалению, когда я меняю «:» на «=» в своем javascript, результаты все равно возвращаются на сервер в виде строк, и все, включая «=», удаляется. например. Вместо "AltTitle:some Alt Title" я получаю "AltTitle".   -  person MFB    schedule 08.06.2011
comment
Опять же, вы должны посмотреть на инструменты разработчика в вашем браузере. Отправьте данные как url?key1=value1&key2=value2 и посмотрите на опубликованное значение. Затем, как только вы поймете, что опубликованное значение верно, перейдите к своему коду Python и используйте for key, value in request.params.items(): print key, value.   -  person Antoine Leclair    schedule 08.06.2011
comment
Антуан, теперь я понял. Благодарю вас!   -  person MFB    schedule 08.06.2011


Ответы (1)


Вы говорите, что хотите преобразовать каждую строку request.param в объект словаря, но вы это имели в виду? Похоже, что каждая строка представляет собой просто пару ключ/значение.

Вы можете довольно просто создать словарь из этих значений, используя:

opts = {}
for r in request.params:
    parts = r.split(':', 1)
    if len(parts) == 2:
        opts[parts[0]] = parts[1]
    else:
        # some error condition
person Michael Merickel    schedule 07.06.2011
comment
Я думаю, это позор, что мы должны это сделать, но это отличный способ сделать это. Спасибо, ванны @Michael Merickel. - person MFB; 07.06.2011
comment
Хорошо, учитывая, как вы строите запрос в javascript, вам придется разобрать его таким образом, я думаю. Вы всегда можете сериализовать словарь в javascript в формате json, который вы могли бы просто использовать json.loads(...) в python. - person Michael Merickel; 07.06.2011
comment
Хорошо, я посмотрю на это. Ваш вышеупомянутый метод работает нормально, но лучше всего правильно вывести его из javascript. Еще раз спасибо, Мэтт. - person MFB; 07.06.2011