2015-05-14 14 views
1

Я просто разбираюсь с шаблоном jinja2 на GAE. То, что я пытаюсь сделать, - отобразить статус-мс в обработанном шаблоне без повторного отображения всего шаблона.Обработка частичных страниц, использование обработчика запроса webapp2 для передачи сообщения

У меня есть обработчик запросов 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="[email protected]",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, Деннис

+1

что вы делать хорошо. Вы не можете передать сообщение, как вы предлагаете, без какого-либо javascript, работающего на стороне клиента, управления POST данных, а затем обновления только этого компонента страницы. поэтому вы должны сделать все, чтобы изменить его. http://ru.wikipedia.org/wiki/Ajax_%28programming%29 –

+0

благодарит за возможность сообщить мне. Я портировал этот бит кода из существующего приложения, которое я написал в asp.net, используя обновляемые панели. Я думал, что что-то подобное было бы доступно с шаблонами jinja2. я буду рассматривать что-то делать на стороне клиента, так как я не хочу, чтобы вся страница перезагружалась. –

+0

np. это могло бы помочь: http://www.django-rest-framework.org/ –

ответ

2

Пол Коллингвуд (а не игрок в крикет Durham я предполагаю) указал мне в правильном направлении, предлагая они должны быть решены с помощью вызова AJAX. Исходя из фона ASP.net, я привык обновлять панели и искал аналогичную технологию в рамках jinja2. Это, похоже, не существует. К счастью, звонки AJAX с jQuery мертвы. Я делаю вызов из моего 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='[email protected]',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') 
+0

не игрок в крикет, нет;) –