Как рендерить кортежи в бутылочках - PullRequest
2 голосов
/ 18 ноября 2011

Я использую bottlepy, и у меня есть такая вещь:

..code..
comments = [(u'34782439', 78438845, 6, u'hello im nick'), 
(u'34754554', 7843545, 5, u'hello im john'), 
(u'332432434', 785345545, 3, u'hello im phil')] 

return comments

В представлении я сделал это:

%for address date user text in comments:
      <h3>{{address}}</h3>
      <h3>{{date}}</h3>
      <h3>{{user}}</h3>
      <h3>{{text}}</h3>
%end

Когда я запускаю сервер, ошибкаis:

Error 500: Internal Server Error

Sorry, the requested URL http://localhost:8080/hello caused an error:

Unsupported response type: <type 'tuple'>

Как я могу отобразить его в виде?

(простите за мой английский)

Ответы [ 2 ]

7 голосов
/ 21 ноября 2011

Ваш код имеет две проблемы. Во-первых, ответ не может быть списком кортежей. Это может быть строка или список строк, как предлагает Питер, или, если вы хотите использовать представление, это может (и должен) быть словарь переменных представления. Ключи - это имена переменных (эти имена, такие как comments, будут доступны в представлении), значения - произвольные объекты.

Итак, ваша функция обработчика может быть переписана как:

@route('/')
@view('index')
def index():
    # code
    comments = [
        (u'34782439', 78438845, 6, u'hello im nick'), 
        (u'34754554', 7843545, 5, u'hello im john'), 
        (u'332432434', 785345545, 3, u'hello im phil')]
    return { "comments": comments }

Обратите внимание на декораторы @view и @route.

Теперь у вас есть проблема с кодом вашего представления: отсутствуют запятые в распаковке кортежей. Следовательно, ваше представление (в моем случае имя index.html) должно выглядеть следующим образом:

%for address, date, user, text in comments:
    <h3>{{address}}</h3>
    <h3>{{date}}</h3>
    <h3>{{user}}</h3>
    <h3>{{text}}</h3>
%end
4 голосов
/ 18 ноября 2011

Я полагаю, что бутылка ожидает либо строку, либо список строк, поэтому вам может потребоваться преобразовать ее и проанализировать.

 return str(result)

Чтобы узнать о способах форматирования результатов, обратитесь к разделу " Шаблон бутылки для форматирования вывода " в http://bottlepy.org/docs/dev/tutorial_app.html

...