3

現在、 init .pyファイルのこのルートを介して到達するホームページを持つピラミッド(Python)アプリがあります。

 config.add_route('home_page', '/')

私のviews.pyファイルには次のものがあります。

@view_config(route_name='home_page', renderer='templates/edit.pt')
def home_page(request):
    if 'form.submitted' in request.params:
        name= request.params['name']
        body = request.params['body']
        page=Page(name,body)
        DBSession.add(page)
        return HTTPFound(Location=request.route_url('view_page',pagename=name))

そして私のedit.ptテンプレートに私は持っています

<form action="${save_url}" method="post">
    <textarea name="name" tal:content="page.data" rows="10"
                    cols="60"/><br/>
    <textarea name="body" tal:content="page.name" rows="10"
                    cols="60"/><br/>
<input type="submit" name=form.submitted value="Save"/>
</form>

したがって、基本的な目標は、ページ名とページ本文の2つの情報を送信するためのフォームを含むこのedit.ptテンプレートをホームページに表示することです。フォームを送信すると、return HTTPFound関数は、作成されたview_pageにリダイレクトする必要があります。これにより、新しい永続URLにページ名のページ本文が表示されます。

home_pageview_configのifステートメントの後に何を追加すればよいかわかりません。フォームが送信されていない場合は、何も起こしたくないので、そのedit.ptテンプレートを引き続き表示する必要があります。現在、ホームページにアクセスしようとするとエラーが発生します。ValueError:レンダラーが非辞書で値として渡されました。

4

1 に答える 1

8

条件がないようです

@view_config(route_name='home_page', renderer='templates/edit.pt')
def home_page(request):
    if 'form.submitted' in request.params:
        name= request.params['name']
        body = request.params['body']
        page=Page(name,body)
        DBSession.add(page)
        return HTTPFound(Location=request.route_url('view_page',pagename=name))

    # form was not submitted here, need to return context
    # ValueError: renderer was passed non-dictionary as value < beacuase you were
    # not returning context for this case before
    return {} # template contenxt here
于 2013-01-28T20:26:00.543 に答える