【问题标题】:Keeping checkbox values with gae-sessions使用 gae-session 保存复选框值
【发布时间】:2015-01-29 11:28:36
【问题描述】:

我在寻找答案,但这都是关于 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 google-app-engine session


    【解决方案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 模板之前执行此操作 - 您可以随时执行此列表到字典的翻译。但由于它关于演示问题的,所以这似乎是一个不错的地方。

    【讨论】:

    • 感谢您的回答。我做了 tpi_vars={'opts': dict.fromkeys(opts, 'checked')} 和 session['opts']=opts 。它似乎有效,但我该如何使用它们?像这样使用是正确的方法吗? if u'opt1' in opts: self.response.out.write("opt1 is checked")
    • @St3114,不!在获取中,您只需像现在一样编写template.render(根据我的A修改模板和环境);在帖子中你会得到'opts'不是像你那样打错了'opt'),这只是用户提交表单时选中的复选框的列表。大概您的意思是将该信息用于某些特定于应用程序的目的,除了将其持久化到会话中之外 - 您从未告诉我们您的应用程序特定目的(我怀疑应用程序的目的是告诉用户他们检查了哪些复选框,对吗?-)
    • 我想创建 gae 项目,该项目将根据所选选项生成 rss 提要。这些选项将是专栏作家。我打算添加一个登录检查。用户将登录并更改选项。 sitename.appspot.com/rss.xml 将是生成的 rss。我想我不能在会话中存储这个设置。它只适用于同一个浏览器。我的整个项目yadi.sk/d/ADwATa7VeNR5m
    • @St3114,当然你可以存储在会话中,只要确保会话由数据存储支持,请参阅dound.com/myprojects/gae-sessions/docs/html/docindex.html 的文档!这与复选框完全没有关系,所以我建议你开始另一个关于 gaesessions 的问题。
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2013-09-22
    • 2023-01-29
    • 1970-01-01
    • 2016-09-03
    相关资源
    最近更新 更多