0

私は 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>

これはテーブル コードであることがわかり、ページをテキストではなく表形式でレンダリングしたいと考えています。なぜこれが起こっているのですか?そして、それをフォームとしてレンダリングする方法は?

4

1 に答える 1

0

Jinja2 のドキュメントによると、デフォルトですべての HTML をエスケープしているようです。

上記のテンプレートを見ると、「イベントフォーム」で「エスケープ」フィルターを使用していることがわかります。Jinja のそのようなフィルターに関する情報を見つけることができませんでした。また、フォームを HTML フォームとしてレンダリングしたい場合、なぜそれをエスケープする必要があるのでしょうか?

{{イベントフォーム|エスケープ}}

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

于 2012-05-07T06:28:52.060 に答える