GAE模板呈现为html文本而不是表单

时间:2012-05-06 04:00:21

标签: html google-app-engine templates

我正在研究GoogleAppEngine事件示例,我正在努力 构建一个我可以输入事件数据的表单

from google.appengine.ext.db import djangoforms

class Event(db.Model):
    title = db.StringProperty(required=True)
    description = db.TextProperty()
    time = db.DateTimeProperty()
    location = db.TextProperty()
    creator = db.UserProperty()

class EventForm(djangoforms.ModelForm):
    class Meta:
        model = Event

class EventsPage(webapp.RequestHandler):
    def get(self):
        eventform = EventForm()

        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        template_values = {
            'events': events,
            'eventform': eventform,
            'url': url,
            'url_linktext': url_linktext,
        }

        template = jinja_environment.get_template('events.html')
        self.response.out.write(template.render(template_values))

----events.html----
<html>
 <head>
  <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
 </head>
 <body>
 {% for event in events %}
   <blockquote>{{ event.content|escape }}</blockquote>
 {% endfor %}
 <form action="/newevent" method="post">
  <!--  Even though <table> is below, event form is not put inside <table>.  Why?? -->
  <table>
    {{ eventform|escape }}
  </table>
  <div><input type="submit" value="New Event"></div>
 </form>
 <a href="{{ url }}">{{ url_linktext }}</a>
</body>
</html>

当我运行我的代码时,以下内容将作为文本呈现在我的页面上:

<tr><th><label for="id_title">Title:</label></th><td><input type="text" name="title" id="id_title" /></td></tr> <tr><th><label for="id_description">Description:</label></th><td><textarea id="id_description" rows="10" cols="40" name="description"></textarea></td></tr> <tr><th><label for="id_time">Time:</label></th><td><input type="text" name="time" id="id_time" /></td></tr> <tr><th><label for="id_location">Location:</label></th><td><textarea id="id_location" rows="10" cols="40" name="location"></textarea></td></tr> <tr><th><label for="id_creator">Creator:</label></th><td><input type="text" name="creator" id="id_creator" /></td></tr>

我可以告诉这是表格代码,我希望页面呈现为表格形式,而不是文本。任何想法为什么会这样?以及如何 让它呈现为一种形式?

1 个答案:

答案 0 :(得分:0)

我对Jinja并不熟悉,根据Jinja2文档,默认情况下它似乎逃脱了所有HTML。

通过查看上面的模板,我发现您在'eventform'上使用'escape'过滤器,我无法找到有关Jinja过滤器的信息。此外,如果您希望将表单呈现为HTML表单,那么为什么我们需要将其转义呢?

{{eventform | escape}}

http://jinja.pocoo.org/docs/api/#autoescaping