1

GAE での jinja2 のテンプレート化に取り組んでいます。私がやろうとしているのは、テンプレート全体を再度レンダリングせずに、レンダリングされたテンプレートにステータス メッセージを表示することです。

メールの送信を処理する webapp2 要求ハンドラーがあります。エラー例外の場合、ページにメッセージを表示したいと思います。メールが正常に送信された場合も同様です。

テンプレートをレンダリングし、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'}))

Thx、デニス

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

これは、メールを処理した後に応答を返すサーバー上の 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 に答える