POST多个复选框值龙卷风

时间:2010-09-04 04:07:47

标签: python forms post checkbox tornado

我正在搞乱龙卷风网络应用程序,我需要一些帮助。我有多个具有相同名称的复选框,我想POST所选的复选框。

<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"/>

我可以在POST之前使用javascript获取每个值,但是在python(龙卷风)方面遇到此列表时遇到了麻烦。我只获得最高选择值。

它在python方面看起来像是:

...

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

2 个答案:

答案 0 :(得分:2)

让多个标签具有相同的名称属性,但 id 属性必须必须是唯一的 - 这里,它们不是(除非每个相同的DB_BASED_ID出现在某种程度上意味着用不同的值替换?但是为什么不显示实际上的东西 distinct,因为它们出现在真正的HTML中?!),使得这个无效的HTML并受到各种各样的问题的影响。

修复此问题后,在这些处理程序方法中,self.request.arguments['activity'](如果所述目录中存在该字符串键)将是名为'activity'的所有输入的非空值列表(如果有)。

答案 1 :(得分:0)

这也可以通过循环进行动态演示和收集来完成。假设,如果您在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结合在一起,形成了一个简单的界面。可行且快速,公认不是最佳的生产解决方案。希望这会有所帮助!