2017-11-13 5 views
0

私はJinja2テンプレートでPython Pyramidを使用しています。フォームデータをセッションに保存し、別のHTMLページで取得したいデータを渡すためにどのように変更する必要がありますか?私は、このキーのデータをViews.pyのセッションに保存する方法を知っています(request.session['postal'] = 01934)。これはDelivery.jinja2のキーではありません。 print (session['postal'])を使用した場合、これはコマンドプロンプトでのみ表示されますが、HTMLページでは表示されません。誰か助けてくれますか?私はこれの初心者です。Python Pyramid - セッションを使用して別のページにフォームデータを渡す

Views.pyに追加/変更する内容

私のHTML:Delivery.jinja2

<form class="form-horizontal" method="POST"> 
<div class="form-group"> 
    <label class="control-label col-md-2" for="postal">Postal Code:</label> 
     <input type="text" class="form-control" id="postal" placeholder="Enter Postal Code" name="postal" /> 
</div> 
<div class="form-group"> 
    <label class="control-label col-md-2" for="address">Detailed Address:</label> 
     <textarea class="form-control" rows="3" id="address" placeholder="Enter Address" name="address"></textarea> 
</div> 
<div class="form-group"> 
    <label class="control-label col-md-2" for="unit">Unit No #:</label> 
     <input type="text" class="form-control" id="unit" placeholder="Enter Unit No" name="unit" /> 
</div> 
<button type="submit" class="btn btn-default" name="submit">Submit</button> 
</form> 

Views.py

@view_config(route_name='deliveryLink', renderer='templates/deliveryLink.jinja2') 
def deliveryLink(request): 
    print("YAY for gift delivery via Link") 

if 'submit_deliverylink' in request.POST: 
    print("request.POST: ", request.POST) 

    myform = request.POST 

    for m in myform: 
     print("key: ", m, " value: ", myform[m]) 

    session = request.session 

    session['postal'] = ? 
    session['address'] = ? 
    session['unit'] = ? 

    data = "??" 

    data_array = data.split(",") 
    session['data'] = data_array 

    session['delivery'] = str(data_array) 

    print (session['delivery']) 

    return HTTPFound(location='http://localhost:5555/confirmation') 
return {} 

@view_config(route_name='confirmation', renderer='templates/confirmation.jinja2') 
def confirmation(request): 
    print("YAY for confirmation") 

     for a in request.POST: 
      request.session[a] = request.POST[a] 

    return {} 

と私はデータは、この確認ページに表示する前に入力したとしますConfirmation.jinja2

<form class="form-horizontal" method="POST"> 
    <div class="form-group"> 
     <label class="control-label col-md-2" for="postal">Postal Code:</label> 
      <input type="text" class="form-control" id="postal" name="postal" /> 
    </div> 
    <div class="form-group"> 
     <label class="control-label col-md-2" for="address">Detailed Address:</label> 
      <textarea class="form-control" rows="3" id="address" name="address"></textarea> 
    </div> 
    <div class="form-group"> 
     <label class="control-label col-md-2" for="unit">Unit No #:</label> 
      <input type="text" class="form-control" id="unit" name="unit" /> 
    </div> 
    </form> 

答えて

0

私は、最初のフォームから確認ページのテンプレートに、セッションなしでPOSTを渡すことができると思います。

セッションを必要とにかく場合は、あなたのテンプレート

<input type="text" class="form-control" id="postal" name="postal" value="{{session['postal']}}" />


# after form submitted, it sends post request, just check if it exist 
if request.POST: 
    print("request.POST: ", request.POST) 

    myform = request.POST 
    # you need iterate over keys for this case 
    for m in myform.keys(): 
     print("key: ", m, " value: ", myform[m]) 

    session = request.session 
    # you can access request.POST directly or use your variable myfrom 
    # use myform.get('postal','') to get value by key 
    session['postal'] = myform.get('postal','') 
    session['address'] = myform.get('postal','') 
    session['unit'] = myform.get('unit','') 

    data = "??" 

    data_array = data.split(",") 
    session['data'] = data_array 

    session['delivery'] = str(data_array) 

    print (session['delivery']) 

    return HTTPFound(location='http://localhost:5555/confirmation') 
+0

こんにちは、返信いただきありがとうございますから、それを呼び出すことができます!このラインはどのように機能するのでしょうか? 'session ['postal'] =?'フォームにキー入力したデータを取得するには? –

+0

私は私の答えを編集し、コメントし、あなたのコードに少し追加します。私はPython Pyramidで動作しませんでしたが、変数 'data'のために何が想定されているのかよくわかりません – SAZ

関連する問題