使用gae-sessions保持复选框值

时间:2015-01-28 22:15:12

标签: python google-app-engine session

我寻找答案,但这完全是关于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

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

1 个答案:

答案 0 :(得分:1)

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

您的 Jinja 模板似乎有误,因为在环境中查看,也没有将任何复选框标记为checked。我建议像:

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

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

现在你得到的opt是一个列表,例如例如['opt1'],如果那是发布时唯一选中的复选框。你可以在Jinja方面解决这个问题,但我认为在Python方面它更容易。所以,而不是:

tpi_vars={"opt":opt}

我会这样做:

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

当然,在渲染Jinja2模板之前,您不必这样做 - 您可以随时进行此列表到字典的翻译。但由于 关于演示文稿问题,这似乎是个好地方。