2

5 つの選択肢を含むドロップダウン メニューを作成しました。ユーザーが選択肢を選択して送信ボタンを押すと、その「選択」を Django のバックエンド/サーバーに転送するにはどうすればよいですか?

その後、セレクションの値がバックエンドに到達したら、その値を使用して別のフォームを作成するつもりです。選択できるフォームは 5 つあり (選択肢ごとに 1 つ)、表示されるフォームの種類は、元の選択の値によって異なります。

これは私がこれまでに持っているものですが、「キー 'selection' が QueryDict に見つかりません: {}」というエラーが表示されます。

HTML ファイルは次のとおりです。

<div id = "f1" style="display:none">
  <form name= "form1" action='/products/{{ action }}/' method='get'>
    <p class="choice-header"> Product: </p>
    <select id = "g1" title="selection" onchange = "showForm()">
      <option value = "0">--</option>
      <option value = "1">Form 1</option>
      <option value = "2">Form 2</option>
      <option value = "3">Form 3</option>
      <option value = "4">Form 4</option>
      <option value = "5">Form 5</option>
    </select>
    <div id= "b1" style="display:none">
      <input class="button" type=submit value="{{ button }}">
    </div>
  </form>
</div>

これがDjangoのviews.pyファイルです

def new2(request):
  form_no = request.GET["selection"]

  if form_no == 1:
    form_to = Form1()
  c = RequestContext(request, {
    'action': 'add/2',
    'button': 'Add', 
    'form': form_to,
  })
  return render_to_response('links/add.html', c)

助けてくれてありがとう!

4

2 に答える 2

1

これはあなたを助けるはずです: django - HTML <select> からデータを収集します

基本的に、HTML の select 要素に名前が必要で、次の方法でアクセスできます。

request.GET["nameOfYourAwesomeSelectList"]

編集: GET メソッドを使用していることに気付きました。GET を使用してフォーム データをサーバーに送信する理由はありますか? 純粋な好奇心。

編集 2: form_to に関するエラーについては、選択した項目が 1 の場合にのみ初期化していることに注意してください。そのため、値 1 ではない項目を選択すると、form_to は初期化されないため、RequestContext を作成すると怒られます。form_to を常に初期化するか、form_to が null の場合に RequestContext の作成方法を変更する必要があります。

于 2012-08-03T20:58:35.953 に答える
1

これは実際には Django の問題ではありません。select要素にname属性を与えていないだけです。

<select id="g1" name="selection">
于 2012-08-03T20:58:59.610 に答える