2012-05-06 104 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