私は大量の入力を含むFlaskアプリケーションを開発しています。入力の中には他の入力に依存するものがあるので、これらの依存入力を公開するDOM操作があります。ユーザーがすべてを再入力する必要がないように、ユーザーが戻ったときにアプリケーションがDOM状態を覚えておきたいです。これを行う最善の方法は何ですか?フラスコ:アプリケーション全体の変数+ DOM操作を記憶する
以下は、私がうまくいくと思われることを示しています。私は番号を取る入力ボックスを持っています。同じ入力フィールドをDOMに追加するボタンもあります。ユーザーがサブミットをクリックすると、これらの入力はinput_list
に追加され、リストがUIに表示されます。 input_list
はグローバル変数なので、アプリケーションはこれらの入力とその値を覚えています(たとえブラウザに戻るかページをリロードしたとしても)。これが私が探しているものです。
もう一度、これを実行する最良の方法であるかどうかはわかりません。私はflask.g
アプリケーションのグローバルを格納するために使用することができますが、私はこれ(データベース接続を格納するために使用されて見たことがある)のための適切なユースケースであるかどうかはわかりません。また、CookieがDOMの変更を記憶するのに役立つと聞いています。どのような思考/例が役に立つでしょう。誰かが自分のやり方が大丈夫だと思うなら、私は以下のコードに感謝します。
app.py:
@app.route('/input_page', methods=['GET', 'POST'])
def input_page():
global input_list
input_list = []
if request.method == 'POST':
if request.form.get('empty_list'):
input_list = []
elif request.form.get('submit_list'):
input_list = [int(i) for i in request.form.getlist('x')]
return render_template('input_page.html', input_list=input_list)
input_page.html:あなたは正しい軌道に乗っているようだ
<p>{{ input_list }}</p>
<form method="POST" action="/input_page">
<div id="input_container">
{% if input_list %}
{% for i in input_list %}
<input type="number" name="x" value="{{ input_list[loop.index0] }}">
{% endfor %}
{% else %}
<input type="number" name="x">
{% endif %}
</div>
<button type="button" id="add_input">Add Input</button>
<input type="submit" value="Submit List" name="submit_list">
<input type="submit" value="Empty List" name="empty_list">
</form>
<script>
$(document).ready(function(){
$('#add_input').click(function(){
var $new_input = $('<input>', {type: 'number', name: 'x'});
$('#input_container').append($new_input);
});
})
</script>
あなた 'request.form'のみ提出フィールドに関する情報が含まれています。だから、 'request.form'からアイテムを取り出して、レンダリングされたHTMLの中に貼り付けるのはどうですか? – wanderlust
あなたはそれが何を意味するのか混乱していますか? –
'request.form'は{DOM_name ':' DOM_value '}のペアを含むImmutableDictです。だからあなたのフォームに属性 'name' ==' 'のタグがあり、それに何らかの値があれば、' request.form.get( 'name') 'を参照してサーバ側でこの値を取得することができます。後でこの値を新しく生成したフォームに入れることができます。 –
wanderlust