0

ページ上の HTML フォームを閉じてから、再度開いて続行することはできますか? 基本的に、データベースからデータを引き出すスプレッドシート esk の Web フロントがあります。ただし、フィールドを左の div と右の div に分割する必要がありました。右側の div には左側の div よりも多くのフィールドが含まれているため (左側の div フィールドはスクロールバーのない静的フィールドのようなものです)、水平スクロールバーを右側の div に配置する必要があったためです。これは、既存のスプレッドシートの外観を再現するためです。

テンプレート内で 2 つの for ループを使用してこれを行うことにしました。最初のループはページの左側を生成し、次に左側の div を閉じます。2 番目のループはページの右側を生成し、次に右側の div を閉じます。

私がこれを行っている方法のために、最初のフォームを閉じる前に多数のフォーム要素があるという問題があります。

<div left>
   <% for bla in bla %}
       <form id="{{ bla.id }}"><submit>
       <input value="{{ bla.name}}"><input value="{{ bla.number }}">
   {% endfor %}
</div>
<div right>
    {% for bla2 in bla2 %}
       <input value="{{ bla2.address}"><input value="{{ bla2.state }}">
       </form>
    {% endfor %}
</div> 

上記と同様のコードで生成されたhtmlを表示すると、2番目のdivが生成されるまで閉じられない多くのフォーム要素があるため、明らかに問題があります。したがって、私の POST データは常に最後のレコードです。

私が試したのは、フォームに {{ bla.id }} という名前と ID を付けたことです。次に、最初のループでフォームを閉じ、同じ ID と名前 {{ bla.id }} を持つ新しいタグを 2 番目のループに配置します。

このフォームが以前のフォームの続きであることをページが認識していると思いましたが、残念ながら機能せず、回避方法が見つからないようです。

ロジック全体がオフになっている可能性があり、ページ全体を別の方法で生成する必要があります。たぶん、私が見逃している簡単な解決策があります...

十分に説明したことを願っています。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

0

[編集]

コメントから、各レコードに送信ボタンが必要な場合でも、以下に概説するマークアップを使用して、各フォーム タグを「行」としてループすることができます。オブジェクト名blahblah2は、特にすべてのフィールドが 1 つのモデルで構成されている場合は、やや誤解を招く可能性があります。

実際、フィールドがすべて同じモデルの一部である場合、for ループは、各「列」内ではなく、form タグの外側に単純に移動します。

フィールドを手動で出力したくない場合の別のオプションは、モデル フォームセットを使用してモデル フォームの複数のインスタンスを生成することです。マークアップは以下に概説するものとほぼ同じですが、フォームセットのループの外側にフォームセットの管理フォーム用の追加フィールドがあります。

例:

<form action="." method="post" enctype="application/x-www-form-urlencoded">
    <div id="left_column">
        <fieldset>
            {% for bla in blah %}
                <input name="name" value="{{ bla.name}}" />
                <input name="number" value="{{ bla.number }}" />
            {% endfor %}
        </fieldset>
    </div>
    <div id="right_column">
        <fieldset>
            {% for bla2 in blah2 %}
                <input name="address" value="{{ bla2.address}" />
                <input name="state" value="{{ bla2.state }}" />
            {% endfor %}
        </fieldset>
    </div>
    <input type="submit" value="Submit" />
</form>

各フォーム要素には name 属性が必要です。そうしないと、request.POST QueryDict でそれらを見つけることができません。form タグは、JavaScript を介して POST を実行し、JavaScript を介して値を収集する場合を除き、POST の一部として送信するすべての要素を包含する必要があります。

于 2013-02-06T01:46:57.710 に答える