2012-07-31 69 views
2

我得到我的表单以使用Google App Engine上的WTForm model_form来显示。我希望看到显示的字段,当我访问/管理/ newpostWTForm GAE model_field不会呈现Jinja2模板中的字段

我的模型

class BlogPost(db.Model): 
    #The URL path to the blog post. Posts have a path if they are published. 
    path = db.StringProperty() 
    title = db.StringProperty(required=True, indexed=False) 
    body = db.TextProperty(required=True) 
    published = db.DateTimeProperty(auto_now_add=True) 
    updated = db.DateTimeProperty(auto_now=True) 

我PostHandler

class PostHandler(webapp2.RequestHandler): 

@webapp2.cached_property 
def jinja2(self): 
    return jinja2.get_jinja2(app=self.app) 

def render_to_response(
    self, 
    template_name, 
    template_vals=None, 
    theme=None 
    ): 
    template_name = "admin/%s" % template_name 
    self.response.out.write(render_template(
     template_name, template_vals, theme)) 

def render_form(self, form): 
    self.render_to_response("edit.html", {'form': form()}) 

def get(self): 
    form = model_form(BlogPost) 
    self.render_form(form) 

Edit.html模板不工作

{% extends "base.html" %} 
{% block title %}New Post{% endblock %} 
{% block body %} 
    <form method="post" action=""> 
    <table> 
     {{form}} 
    </table> 
    <input type="submit" /> 
    </form> 
{% endblock %} 

有了这个模板,我看到一个表单按钮的HTML。问题是没有显示模型字段。为了让我的领域,以显示我必须这样做......

Edit.html模板工程

{% extends "base.html" %} 
{% block title %}Testing New Post Template{% endblock %} 
{% block body %} 
    <form method="post" action=""> 
    <table> 

<div>{{ form.title.label }}: {{ form.title(class="css_class") }}</div> 
{% if form.title.errors %} 
     <ul class="errors">{% for error in form.name.errors %}<li>{{ error }}</li>{% endfor %}</ul> 
    {% endif %} 

<div>{{ form.body.label }}: {{ form.body() }}</div> 
{% if form.body.errors %} 
     <ul class="errors">{% for error in form.body.errors %}<li>{{ error }}</li>{% endfor %}</ul> 
    {% endif %} 

    </table> 
    <input type="submit" /> 
    </form> 
{% endblock %} 

总之,怎么我得到的第一个版本,以显示在我的示范田形成?

回答

1

您可以子类WTForms.Form提供__html__方法遍历所有的子领域,并返回他们:

class CustomForm(Form): 
    def __html__(self): 
     fields = [u"%s %s" % (field.label, field) for field in self.fields] 
     return Markup(u"".join(fields)) 

也可以创建在神社宏来渲染表单(我有一个例子here,如果你想看到一个)。