1

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

<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")
4

2 回答 2

2

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

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

于 2010-09-04T04:37:46.297 回答
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 以获得简单的界面。可行且快速,诚然不是最好的生产解决方案。希望这可以帮助!

于 2018-10-06T17:21:18.427 回答