1

我刚刚开始掌握 GAE 上的 jinja2 模板。我想要做的是在渲染的模板中显示状态消息,而无需再次渲染整个模板。

我有一个处理发送邮件的 webapp2 请求处理程序。如果出现错误异常,我想在页面上显示一条消息。如果邮件已成功发送,同上。

我渲染模板并将味精作为模板值传递。我可以看到这不是做事的方式,因为整个模板再次呈现。我想要做的只是通过味精。

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'}))

谢谢,丹尼斯

4

1 回答 1

2

Paul Collingwood(不是我认为的达勒姆板球运动员)通过建议应该通过 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);
    }
})}

这是 serer 上的 mailService webapp2 requesthandler,它在处理邮件后发回响应:

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')
于 2015-05-15T15:01:23.730 回答