URL の変更に関して非常に基本的な質問があります。http://example.com/create
いくつかの入力フィールドを持つフォームを含むHTML ページがあるとします。http://example.com/show_list
この入力フィールドから、python のリスト値に基づいたリストを含む別の HTML ページを生成するために使用する python リストを作成したいと考えています。
したがって、ビューhttp://example.com/create
は次のとおりです。
@app.route('/create', methods=['GET', 'POST'])
def create():
if request.method == 'POST':
some_list = parse_form_data_and_return_list(...)
return render_template( "show_list.html", some_list=some_list) #here's the problem!
return render_template( "create.html")
がユーザー入力をparse_form_data_and_return_list(...)
受け取り、いくつかの値を含むリストを返すとしstring
ます。気になる行にコメントを追加しました。すぐに戻ってきますが、最初にhttp://example.com/show_list
、ユーザー入力の後にロードする必要があるページ ( )のテンプレートを提供します。
{% block content %}
<ul class="list">
{% for item in some_list %}
<li>
{{ item }}
</li>
{% endfor %}
</ul>
{% endblock content %}
基本的にこれでうまくいきます。リストの値が Jinja テンプレートに「渡され」、リストが表示されます。
render_template
もう一度ルート メソッドを確認すると、ページを表示するためだけに行っていることがわかりshwo_list
ます。私にとって、これには1つの欠点があります。URL は に変更されませんがhttp://example.com/show_list
、 のままhttp://example.com/create
です。
そこで、次のテンプレートを直接レンダリングする代わりに、メソッド呼び出しで独自のroute
forshow_list
と inを作成することを考えました。このような:create()
redirect
@app.route('/show_list')
def tasklist_foo():
return render_template( "show_list.html" )
list
しかし、この場合、オブジェクトを に渡す方法がわかりませんshow_list()
。もちろん、リストのすべての項目を URL に解析することもできます (したがって、に投稿しますhttp://example.com/show_list
) が、それは私がやりたいことではありません。
すでにお気づきかもしれませんが、私は Web 開発に関してかなりの初心者です。間違ったパターンを使用しただけか、トリックを実行する単純な API 関数が見つからなかったと思います。そこで、私の問題を解決する方法を教えてください (簡単に要約します): テンプレートをレンダリングし、メソッド/ルートで作成されたリストを使用するshow_list
ように URL を変更します。http://example.com/create
http://example.com/show_list
create()