2012-05-06 134 views
0

我工作過GoogleAppEngine事件例子,我想 構建我可以進入事件數據GAE模板呈現形式爲HTML文本而不是形式

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>

我可以告訴大家,這是表的代碼,我想在頁面呈現爲表格形式,而不是文字。任何想法爲什麼發生這種情況?以及如何 使它呈現爲一種形式?

+2

你能發佈這類用於生成這個網頁的模板?它看起來像提供的文件缺少HTML的「」,「」和「」樣板文件,很可能這是因爲該模板也缺少樣板文件。 –

+0

我添加了''標籤的整個模板。我仍然無法弄清楚爲什麼它將html作爲文本打印出來,但並未將其作爲表單呈現。 – codingJoe

回答

0

我對Jinja並不熟悉,因爲按照Jinja2文檔,它默認情況下會轉義所有的HTML。

從上面的模板看,我看到您在'eventform'上使用'escape'過濾器,我無法爲Jinja找到有關這種過濾器的信息。此外,如果您希望表單被呈現爲HTML表單,那麼爲什麼我們需要將其轉義?

{{eventform |逃生}}

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

+0

謝謝,我試過了,沒有逃脫。仍然沒有快樂。 – codingJoe