を受け取ってからPOST
、新しいフィールドを含むフォームを生成し、前に受け取った値をPOST
隠し変数として渡しようとしています。私はドキュメントで多くの検索を行ってきましたが、このフローの 2 つの側面を結び付けるものを見つけることができないようです。私はDjango 1.4とPython 2.7を使用しています。
ビュー.py
from django.shortcuts import render_to_response
from gateway_interface.forms import newForm
def requestNewForm(request):
if (request.method == "POST"):
form = newForm(request)
return render_to_response('myTemplate.html', {'form' : form})
フォーム.py
from django import forms
class newForm(forms.Form):
def __init__(self, request):
my_passed_variable = request.POST['pass_variable']
a_new_variable = forms.CharField(max_length = 25)
my_passed_variable = forms.CharField(widget = forms.HiddenInput())
myTemplate.html
<form action="/myNextDjangoView/" method="post">
<div class="fieldWrapper">
I need this value: {{ form.a_new_variable }} <br>
</div>
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
<input type="submit" value="Submit">
</form>
何か根本的に間違ったことをしているに違いない。テンプレートで for ループを使用すると、表示可能なフィールドがページに表示されません。私が試したことはありませんが、隠しフィールドにデータが入力されませんでした。
助言がありますか?おそらく、どこかにインポートがありませんか?forms.py
を使用できるようにするためにインポートする必要があるものはありHiddenInput()
ますか?
編集1:次のように変更forms.py
しました:
form django import forms
class newForm(forms.Form):
a_new_variable = forms.CharField(max_length = 25)
my_passed_variable = forms.CharField(widget = forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(newForm, self).__init__(*args, **kwargs)
これは私の出力を変更していません。フィールドが表示されていない(非表示または表示)同じフォームが表示されます。私がする必要があるのは、初期化辞書を使用してインスタンス化することです。(私は思う?) ディクショナリには、すべての非表示フィールドの名前と値が含まれています。
initial_dict = { 'my_passed_variable' : request.POST.get('pass_variable') }
form = newForm(initial = initial_dict)
編集2:
初期化辞書を使用することは、正しい方向への一歩でした! フォームに表示されているフィールドが表示されるようになりましたが、非表示のフィールドにはまだ値が入力されていません。
ビュー.py
from django.shortcuts import render_to_response
from gateway_interface.forms import newForm
def requestNewForm(request):
if (request.method == "POST"):
initial_dict = { 'my_passed_variable' : request.POST.get('pass_variable') }
form = newForm(initial = initial_dict)
return render_to_response('myTemplate.html', {'form' : form})
編集3:
私はそれが働いている。私を正しい方向に導いてくれた Jordan Reiter に感謝します。問題はほぼ完全に、EDIT 1
上記の後のブラウザのキャッシュであることがわかりました。Chrome のシークレット モードに移行すると、すべてが機能しました。