1

Jinja2 テンプレート エンジンを使用した次のクライアント側フロントエンド HTML があります。

{% for record in result %}
    <textarea name="remark">{{ record.remark }}</textarea>
    <input type="submit" name="approve" value="Approve" />
{% endfor %}

したがって、HTML には複数のテキストエリアと送信ボタンのセットが表示される場合があります。

バックエンドの Python コードは、モデルを使用して gql クエリから可変数のレコードを取得し、結果としてこれを Jinja2 テンプレートに渡します。送信ボタンがクリックされると、post メソッドがトリガーされてレコードが更新されます。

def post(self):
    if self.request.get('approve'):
        updated_remark = self.request.get('remark')
        record.remark = db.Text(updated_remark)
        record.put()

ただし、場合によっては、クリックされた送信ボタンに対応するレコードが更新されないことがあります (たとえば、ユーザーがレコード 1 の送信をクリックすると、レコード 2 のコメントは更新されますが、レコード 1 は更新されません)。

これは、重複した属性名の発言によるものだと思います。JavaScript/jQuery を使用して、さまざまな属性名を生成できる可能性があります。問題は、バックエンド Python をコーディングして、JavaScript によって生成された (可変数の) 名前を取得するにはどうすればよいかということです。

ありがとう。

4

1 に答える 1

0

編集済み

ループのテンプレート内でloop.index を使用します: ループの現在の反復。

それで:

{% for record in result %}
<textarea name="remark{{ loop.index }}">{{ record.remark }}</textarea>
<input type="submit" name="approve" value="{{ loop.index }}" />
{% endfor %}

戻る:

<textarea name="remark1">first record remark</textarea>
<input type="submit" name="approve" value="1" />
<textarea name="remark2">second record remark</textarea>
<input type="submit" name="approve" value="2" />
<textarea name="remark2">third record remark</textarea>
<input type="submit" name="approve" value="3" />

そしてあなたのバックエンドコードで:

def post(self):
    if self.request.get('approve'):
        updated_remark = self.request.get('remark' + self.request.get('approve'))
        record.remark = db.Text(updated_remark)
        record.put()

私はそれをテストせずにこれを書きました。うまくいかないかもしれませんが、ヒントになるかもしれません。


新しい[より良い]解決策

テキストエリアと入力の各ペアをフォーム内に配置します。

{% for record in result %}
    <form>
        <textarea name="remark">{{ record.remark }}</textarea>
        <input type="submit" name="approve" value="Approve" />
   </form>
{% endfor %}
于 2012-07-05T08:47:19.513 に答える