我刚刚开始掌握GAE上的jinja2模板。我想做的是在渲染模板中显示状态信息,而不需要再次渲染整个模板。
我有一个webapp2请求处理程序,它处理发送邮件。在错误异常的情况下,我想在页面上显示一条消息。如果邮件已成功发送,则同上。
我呈现模板并传递msg作为模板值。我可以看到,当整个模板再次渲染时,这不是做事情的方式。我要做的就是简单地传递msg。
class ContactoPage(webapp2.RequestHandler):
global template
template = jinja_environment.get_template('contacto.html')
def get(self):
self.response.out.write(template.render({'mail_status':''}))
def post(self):
userMail=self.request.get("emailFrom")
if not mail.is_email_valid(userMail):
self.response.out.write(template.render({'mail_status':'wrong mail address'}))
return
subject="Test Mail"
userMessage=self.request.get("emailBody")
message=mail.EmailMessage(sender="dennisargeomatica@gmail.com",subject="Test")
message.to=userMail
message.body=("Thank you! n"
"Your mail: %s n"
"Subject: %s n"
"Message: %s n"
%(userMail,subject,userMessage))
message.send()
self.response.out.write(template.render({'mail_status':'rudy, a msg to you'}))
谢谢,丹尼斯
Paul Collingwood(我认为不是Durham板球运动员)建议用AJAX调用来解决这个问题,为我指出了正确的方向。来自ASP.net背景的我习惯了更新面板,并在jinja2框架中寻找类似的技术。这似乎不存在。值得庆幸的是,使用jQuery的AJAX调用非常简单。我从客户端的javascript中调用,如下所示:
function mailService() {
mailFrom = $('#tbFrom').val();
mailMsg = $('#tbMail').val();
$.ajax({
type : 'POST',
url : 'mailService',
data : {
mailFrom:mailFrom,
mailMsg:mailMsg
},
success: function(response) {
$('#mailStatus').html(response);
}
})}
这是服务器上的webapp2请求处理程序,它在处理邮件后发送响应:
class MailService(webapp2.RequestHandler):
def post(self):
mailFrom = self.request.get('mailFrom')
mailMsg = self.request.get('mailMsg')
if not mail.is_email_valid(mailFrom):
self.response.write('wrong mail address')
return
message=mail.EmailMessage(sender='dennisargeomatica@gmail.com',subject='Your mail to Argeomatica')
message.to=mailFrom
message.body=('Thank you, we have received your mail. n'
'Message: %s n'
%(mailMsg))
message.send()
self.response.write('mail sent')