8

問題のコード:

from flask import Blueprint, render_template, abort
from flask.ext.wtf import Form
import os
from jinja2 import TemplateNotFound
from models import Member
from wtforms.ext.sqlalchemy.orm import model_form
@simple_page.route('/register')
def register():
    form = model_form(Member, Form)
    return render_template('register.html', form=form, name="bad")


class Member(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)

そして私の見解では:

        <p class="txt11 colorb">
        {{ form.name }}
        </p>

<UnboundField(TextField, (), {u'default': None, u'filters': [], u'validators': [<wtforms.validators.Required object at 0x7f62f59b5590>, <wtforms.validators.Length object at 0x7f62f59b55d0>]})>これは、実際のフィールドではなく を出力します。wtform で実際のフォーム/フィールドを取得するにはどうすればよいですか?

4

3 に答える 3

3

もう少し作業を行う必要があります。

{{ form.name.label }} : {{ form.name()|safe }}

または、次の便利なスニペットを使用できます。

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>
{% endmacro %}

もちろん、レンダリングされる HTML を調整します。そのファイルをディレクトリのどこかに保存してtemplatesから、メイン テンプレートに保存します。ここにそのformhelpers.html

{% from "formhelpers.html" import render_field %}
<form method=post action="/register">
  <dl>
    {{ render_field(form.name) }}
    {{ render_field(form.email) }}
  </dl>
  <p><input type=submit value=Register>
</form>
于 2013-05-06T20:27:29.937 に答える