2

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

サーバーを起動すると、エラーは次のようになります。

Error 500: Internal Server Error

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

Unsupported response type: <type 'tuple'>

どうすればビューにレンダリングできますか?

(英語でごめんなさい)

4

2 に答える 2

7

コードには 2 つの問題があります。まず、応答をタプルのリストにすることはできません。Peterが提案するように、文字列または文字列のリストにすることができます。または、ビューを使用したい場合は、ビュー変数の辞書にすることができます(そうすべきです)。キーは変数名 ( などのこれらの名前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
于 2011-11-20T21:59:42.813 に答える
4

ボトルは文字列または文字列のリストのいずれかを想定していると思うので、それを変換して解析する必要があるかもしれません。

 return str(result)

結果をフォーマットする方法については、 http://bottlepy.org/docs/dev/tutorial_app.htmlの「出力をフォーマットするためのボトルテンプレート」のセクションを参照してください。

于 2011-11-18T15:42:12.350 に答える