【问题标题】:POST multiple checkbox value tornadoPOST 多个复选框值龙卷风
【发布时间】:2010-09-04 04:07:46
【问题描述】:

我正在搞乱一个 Tornado 网络应用程序,我需要一些帮助。我有多个同名复选框,我想发布所选复选框的值。

<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>

我可以使用 javascript pre-POST 获取每个值,但在 python (tornado) 端获取此列表时遇到问题。我只得到最高的选定值。

在 python 端它看起来像:

...

def post(self):
    email = self.get_argument("email")
    activity = self.get_argument("activity")

【问题讨论】:

    标签: python forms post checkbox tornado


    【解决方案1】:

    可以让多个标签具有相同的 name 属性,但 id 属性 必须 是唯一的——在这里,它们'不是(除非每次出现相同的DB_BASED_ID 都以某种方式被替换为不同 值?但是为什么不显示实际上不同的东西,因为它们确实出现在真实的 HTML 中?!),使这个无效的 HTML 并受到各种问题的影响。

    一旦这个问题得到解决,在那些处理程序方法中,self.request.arguments['activity'](如果该字符串键存在于所述目录中)将是名为'activity'(如果有)的所有输入的非空值列表。

    【讨论】:

    • 非常感谢。每个id都不一样。我的目标是获取某人感兴趣的活动列表。我希望将一组“已检查”项目传递回数据库。所以实际的 html 看起来更像 远足 骑自行车露营钓鱼我只关心数值,因为它对应于相应活动的pk
    【解决方案2】:

    这也可以通过动态呈现和收集的循环来完成。假设,如果您在 GET 方法中提供要检查的列表,它可以在 HTML 中像这样显示:

    <p><h3>Select Applicable Characteristics:</h3></p>
    {% for c in chars %}
        <p><h4><input type="checkbox" name="{{ c }}" value="{{ c }}"/> {{ c }}</h4></p>
    {% end %}
    

    POST 方法可以迭代该列表,为每个列表收集并创建一个列表输入。它的技术性稍强,但我无法使上述解决方案发挥作用。

    # Characteristics loop
    chars = [x.split('_')[1] for x in bs.attr.keys('chr_*')]
    checked_chars = []
    for c in chars:
        checked = self.get_argument(c, None)
        if checked is not None:
            checked_chars.append(checked)
    

    这结合了 Tornado 的模板 (jinja2) 功能和一些 html 以实现简单的界面。可行且快速,诚然不是最好的生产解决方案。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多