【问题标题】:Using google app engine and python, how do I check if a checkbox is marked?使用谷歌应用引擎和python,我如何检查复选框是否被标记?
【发布时间】:2013-12-06 04:44:16
【问题描述】:

我想使用复选框显示用户想要在购物车中购买的一些商品。

在待售物品的 db.Model 类中,我已包括:

amount = db.StringProperty(required = True)
price = db.StringProperty(required = True)
checked = db.BooleanProperty(default = False)

db.Model 类 html:

<tr>
<td class = "checkbox">
        <input type = "checkbox" name = "check">
    {{s.checked}}
</td>

<td class = "entry_amount" name = "entry">
    {{s.amount}}
</td>

<td class = "entry_price" name = "entry">
    {{s.price}}
</td>
</tr>

每次用户访问购买页面时,每个项目的选中属性都设置为 False。在购买页面的 post 方法上,当用户点击提交时,我有以下内容; check 是复选框的名称;该复选框未在 html 中分配值

sells = SellModel.all()
boxcount = 0

for sell in sells:
    check = self.request.get('check')
    if check:
        sell.checked = True
        sell.put()
        boxcount += 1

if boxcount == 0:
    error = "check at least one box"
    self.render("buy.html", error = error, sells = sells)
else:     
    self.redirect('/cart')

buy.html 包括:

<tr class = "table_label">
            <th></th>
            <th>amount of mp</th>
            <th>price per mp</th>
            </tr>
            {% for sell in sells %}
                {{ sell.render() | safe }}
                </input>
            {% endfor %}

self.redirect 指向购物车页面,其中 get 方法有

 cart = SellModel.all()
    cart.filter("checked = ", True)
    self.render("newbuy.html", cart = cart)

当我进入购物车页面时,每一个列出的待售商品都会被选中,而不仅仅是选中复选框的那些。为什么会这样?

帮助。

【问题讨论】:

    标签: python google-app-engine web-applications checkbox jinja2


    【解决方案1】:

    尝试使用 has_key() python 函数检查字典是否真的有那个键:

    check = self.request.has_key('check') #you may also use ('check' in self.request) - see my comment below.
    if check:
        sell.checked = True
        sell.put()
        boxcount += 1
    

    以上应该可以。如果没有,请更改您的复选框标记,使其实际上具有一些价值:

    <input type = "checkbox" name = "check" value = "true">
    

    html 复选框的标准行为是仅在选中复选框时才发布值。请参阅this 链接了解更多信息。

    【讨论】:

    • foo.has_key('bar') 至少从 Python 2.4 开始就拼写为 bar in foo
    • @DanielRoseman - 可能是,我对 python 也比较陌生。但是 has_key() 确实可以在我的 2.7 脚本中使用,也许它是为了兼容性而维护的。
    • @DanielRoseman - 你是对的。事实证明,has_key() 的性能有点慢:stackoverflow.com/questions/11388136/…。我相应地编辑了我的答案。
    • 我不认为 a 做了一个字典?
    • @smores - 实际上,self.request 对象是一个字典(字典的缩写)。并且每个输入(例如“检查”)都是该字典的一个元素。因此,如果你使用 self.request.has_key('check') 或 ('check' in self.request),你就会知道字典是否包含这个值!
    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多