使用 gae-session 保存复选框值

Keeping checkbox values with gae-sessions

我在寻找答案,但都是关于 php。我得到这个 index.html:

 <form method="post">       
   <input type="checkbox" name="opts" value="opt1" opt[0]> option 1<br>
  <input type="checkbox" name="opts" value="opt2" opt[1]> option 2<br>
  <input type="checkbox" name="opts" value="opt3" opt[2]> option 3<br>
  <br>
   <input name="" type="submit" value="Save" >  

</form>

还有这个main.py

import webapp2
import cgi
import os
import jinja2
from gaesessions import get_current_session
class MainHandler(webapp2.RequestHandler):
    def get(self):
        session=get_current_session()
        opt=session.get('opt',[])        jinja_environment=jinja2.Environment(autoescape=True,loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),'templates')))
        tpi_vars={"opt":opt}
        template=jinja_environment.get_template('index.html')

        self.response.write(template.render(tpi_vars))

    def post(self):
        opt=self.request.get("opt", allow_multiple=True)
        session=get_current_session()

        session['opt']=opt

我想存储选中的复选框并获取它们。我怎样才能做到这一点?

您的 Python 代码似乎是正确的,除了一个奇怪的错误,即使用 jinja_environment 的行连接到前一行 (?!)。

您的 Jinja 模板似乎有误,因为它 不会 在环境中查看,也不会将任何复选框标记为 checked.我会推荐这样的东西:

<input type="checkbox" name="opts" value="opt1" {{ops.get('opt1','')}>
    option 1<br>

等等——用于检查环境的双括号,以及您可以在 Python 端准备的字典 ops

现在你得到的 opt 是一个列表,例如 ['opt1'] 如果那是 post 时间唯一选中的复选框。您可以在 Jinja 端处理该问题,但我认为在 Python 端更容易。所以,而不是:

tpi_vars={"opt":opt}

我愿意:

tpi_vars={'ops': dict.fromkeys(opt, 'checked')}

当然,您不必在呈现 Jinja2 模板之前执行此操作——您可以随时执行此列表到字典的转换。但由于它关于演示文稿的问题,这似乎是个好地方。