我寻找答案,但这完全是关于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
我想存储选中的复选框并获取它们。我怎样才能做到这一点?
答案 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模板之前,您不必这样做 - 您可以随时进行此列表到字典的翻译。但由于 关于演示文稿问题,这似乎是个好地方。