使用 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 模板之前执行此操作——您可以随时执行此列表到字典的转换。但由于它是关于演示文稿的问题,这似乎是个好地方。
我在寻找答案,但都是关于 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 模板之前执行此操作——您可以随时执行此列表到字典的转换。但由于它是关于演示文稿的问题,这似乎是个好地方。