2017-09-13 6 views
0

私はポストフォームを通して1つのテンプレートからビューに変数を送り、次のテンプレートでそれらを使用しています。しかし、変数はテンプレートに到達するときには存在しません。ポストフォームから変数を受け取っていないDjangoビュー

ここには、最初のテンプレートで使用されているJavaScriptがあります。 game2.html:

function clickFntn(clicked_id) { 
{% autoescape off %} 
    var clicked = document.getElementById(clicked_id).src; 
    var clicked1 = clicked.replace(/^.*[\\\/]/, ''); 
    var clicked2 = clicked1.slice(0,-4); 
    if (clicked2 == gv_common) { 
    gv_set1_counter = gv_set1_counter + 1; 
    var set1 = {{ set1 }}; 
    if (gv_set1_counter == 2) { 
     var_user = "{{user}}"; 
     game_id = {{game.id}}; 
     var player_end_time = new Date(); 
     var play_time = parseInt((player_end_time-player_start_time)/1000); 
     post("{% url 'game2_end' %}", {type:"first", user:var_user, time: play_time, id: game_id}); 
    } 
{% endautoescape %} 
}; 
function post(path, params, method) { 
    method = method || "post"; // Set method to post by default if not specified. 

    // The rest of this code assumes you are not using a library. 
    // It can be made less wordy if you use one. 
    var form = document.getElementById("form1"); 
    form.setAttribute("method", method); 
    form.setAttribute("action", path); 

    for(var key in params) { 
     if(params.hasOwnProperty(key)) { 
      var hiddenField = document.createElement("input"); 
      hiddenField.setAttribute("type", "hidden"); 
      hiddenField.setAttribute("name", key); 
      hiddenField.setAttribute("value", params[key]); 

      form.appendChild(hiddenField); 
     } 
    } 

    document.body.appendChild(form); 
    form.submit(); 
} 

view.py:

def game2_end(request): 
    if request.method == "POST": 
     if request.POST.get("type") == "first": 
      user_var = request.POST.get("user") 
      id_var = int(request.POST.get("id")) 
      game=get_object_or_404(mt_game, pk=id_var) 
      if (request.user == game.f_player1): 
       p1_time_var = int(request.POST.get("time")) 
       p2_time_var = game.f_p2_play_time 
       mt_game.objects.filter(pk=id_var).update(f_p1_play_time=2) 
       return render(request, 'game2_end.html', {'user_var':user_var, 'id_var': id_var, 'p1_time_var':p1_time_var, 'p2_time_var':p2_time_var}) 
      elif (request.user == game.f_player2): 
       p1_time_var = game.f_p1_play_time 
       p2_time_var = int(request.POST.get("time")) 
       mt_game.objects.filter(pk=id_var).update(f_p2_play_time=p2_time_var) 
       return render(request, 'game2_end.html', {'user_var':user_var, 'id_var': id_var, 'p1_time_var':p2_time_var, 'p2_time_var':p1_time_var}) 

第2のテンプレートファイル:game2_end.html

<p>Game id: {{id_var}}</p> 
<p>User: {{user_var}} </p> 
<p>Your Gameplay Duration: {{p1_time_var}} seconds </p> 
<p>Opponent Gameplay Duration: {{p2_time_var}} seconds </p> 

私が手ブラウザの出力は次のようになります。

Game id: 23 

User: "" 

Your Gameplay Duration: seconds 

Opponent Gameplay Duration: seconds 

を除くすべての変数がありません。 投稿リクエストの直前の最初のテンプレートで変数が利用可能かどうかを確認しました。これをどうすれば解決できますか?

答えて

0

これは、request.userが私のユーザー名に末尾のスペースを追加していたことが判明しました。それをstr(request.user).strip()に置き換えて、それは魅力的に機能しました。

関連する問題