2

我有一個GAE應用程序,它使用Jinja2模板來爲其html頁面提供服務。Jinja2 html按鈕:在不同的頁面上捕獲POST

現在在我的主python文件中,我有一個類,主處理程序,一個GET和一個POST方法。這一切都適用於有一個按鈕可以執行某些操作的歡迎屏幕。當按鈕被點擊時,調用POST方法調用第二頁。

我找不到有關如何捕捉第二頁上的按鈕事件result.html的任何信息。並使其在主python文件中的進展方法。

所以說:「我怎樣才能與errorMail和toCalendar按鈕上result.html工作

這是我的主要文件:

# -*- coding: utf8 -*- 

import webapp2 
from apiclient.discovery import build 
from oauth2client.appengine import OAuth2Decorator 

from format import formatFile 

import jinja2 
import os 

jinja_environment = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) 

decorator = OAuth2Decorator(secret) 

class MainHandler(webapp2.RequestHandler): 
    @decorator.oauth_required 
    def get(self): 
     template = jinja_environment.get_template('index.html') 
     self.response.out.write(template.render()) 

    #processes the file and shows the results 
    def post(self): 
     # Get the authorized Http object created by the decorator. 
     http = decorator.http() 

     service = build('calendar', 'v3', http=http, 
      developerKey='secret') 

     # Make a list of calendars 
     calendar_list = service.calendarList().list().execute() 

     totalList = formatFile(self.request.get('file')) 

     template_values = {"totalList": totalList, "calendar_list": calendar_list} 

     template = jinja_environment.get_template('result.html') 
     self.response.out.write(template.render(template_values)) 


app = webapp2.WSGIApplication([('/', MainHandler)], 
           debug=True) 

這是index.html頁面:

<!DOCTYPE html> 

<html> 
    <head><title></title></head> 
    <body> 
    <form method="post"> 
    <div><label>Select file:</label</div> 
    <input type="file" name="file"> 
    <br> 
    <input type="submit" name="upload" value="Upload"> 
    </form> 
    </body> 
</html> 

This is page result.html:

<html> 
    <head> 

    </head> 
    <body> 
     <h3>De volgende data staat klaar voor je agenda:</h3> 
     <table border="1" cellpadding="3"> 
      <tr> 
       <th>Dag</th> 
       <th>Datum</th> 
       <th>Tijd</th> 
       <th>Omschrijving</th> 
      </tr> 
       {% for line in totalList %} 
       <tr> 
        {% for item in line %} 
        <td>{{ item }}</td> 
        {% endfor %} 
      </tr>   
      {% endfor %} 
     </table> 

     <br> 
     <b>Selecteer de agende waar de diensten in geplaatst worden:</b> 
     <br> 
     <select> 
      {% for calendar_list_entry in calendar_list['items'] %} 
      <option value=>{{ calendar_list_entry['summary'] }}</option> 
      {% endfor %} 
     </select> 
     <br> 

     <form method="post"> 
      <input type="submit" name="toCalendar" value="In kalender plaatsen"> 
     </form> 
     <br> 
     <b>Uitvoer incorrect? Klik dan op onderstaande knop om foutmeldings-email te sturen.</b> 
     <form method="post"> 
      <input type="submit" name="errorMail" value="Uitvoer incorrect!"> 
     </form> 

    </body> 
</html> 

回答

2

您不必接收按鈕事件。您可以像self.request.get('文件')一樣接收表單數據(包括按鈕)

您可以向帖子添加多個按鈕。 每個表單可以有自己的處理程序後,通過添加一個動作:

的index.html(結果帖子/ RESULT1):

<form action="/result1" method="post"> 

result.html(結果帖子/ RESULT2):

<form action="/result2" method="post"> 
    <input id="toCalender " type="submit" name="toCalendar" value="In kalender plaatsen"> 
    <br> 
    <b>Uitvoer incorrect? Klik dan op onderstaande knop om foutmeldings-email te sturen.</b> 
    <input id="errorMail" type="submit" name="errorMail" value="Uitvoer incorrect!"> 
</form> 
+0

我是否需要在應用程序中添加處理程序= webapp2.WSGIApplication([( '/',MainHandler)], 調試=真)? – Difusio

+1

您可以爲每個帖子添加一個處理程序,但您也可以查找路徑並找出頁面已發佈/提交的數據。 – voscausa

+0

你有什麼機會可以在你的答案中詳細闡述一下? – Difusio

相關問題