-1

次のjinja2テンプレートを使用してレンダリングされている単純なモデルフォームがあります。

<form method="POST" action=""> 
    <table>
      {% for field in form %}   

      <tr>{{ field.label }}</tr>
      <tr>{{ field()|safe }}</tr>

      <tr>
        {% if field.errors %}
        <td>
          <ul class=errors>
            {% for error in field.errors %}
            <li>{{ error }}</li>
            {% endfor %}
          </ul>
        </td>
        {% endif %}
        {% endfor %}
    </table>
    <input type="submit" class="btn"  value="Submit Form"/>
  </form>

wtformsの出力をカスタマイズし、レンダリングされる各フォームフィールドに"required"、jqueryクライアント側検証プラグインを使用するクラスを追加したいと思いました。

以下は私のappenginedbモデルです:

class Song(db.Model):
    title = db.StringProperty()
    lyrics = db.TextProperty()
    duration = db.IntegerProperty()
    movie = db.ReferenceProperty(Movie)
    singer = db.ReferenceProperty(Singer)

以下は私のフォーム、レンダリングスクリプトです:

SubTaskForm = model_form(Song, 
                         exclude=('movie', 'singer'),
                         )

wtfromsバリデーターを使用してバリデーターをアタッチする良い方法は何でしょうか。また、フォームフィールドにclass = requiredをアタッチするにはどうすればよいですか?

方法を教えてください。

4

3 に答える 3

3

このライブラリをご覧くださいhttps://pypi.python.org/pypi/WTForms-ParsleyJSWTFormsサーバー側のバリデーターからクライアント側のparsley.js検証タグを自動的に生成します。

http://codevisually.com/parsley-js/ Parsley.jsは、軽量(12k縮小)のフォーム検証JavaScriptライブラリですが、違いがあります。JSでフォームを検証する代わりに、データ属性を使用して同じ効果を実現します。jQueryとZeptoの両方で動作し、構成が非常に簡単であるため、ほぼすべてのParsleyのデフォルトの動作をオーバーライドして正確なニーズに合わせることができます。

于 2013-08-08T20:20:03.320 に答える
1

1つの方法は、Pythonでそれらを定義するものをオーバーライドすることです。別の方法として、テンプレート自体を<tr class="required"> 試してみてください。試してみてください。

于 2012-07-03T05:59:55.440 に答える
0

レンダラー(field())は、生成されたHTMLの属性として引数を渡します。したがって、たとえばfield(class ='required')を呼び出すことで、フィールドを必須としてマークし、通常どおりjquery検証プラグインを適用できます。コンテキストが「class」をキーワードとして扱う場合は、「class_」を渡すことができます。WTForms.fieldコールノートの詳細。

于 2013-02-07T15:09:44.473 に答える