POST множественное значение флажка торнадо - PullRequest
1 голос
/ 04 сентября 2010

Я возиться с веб-приложением торнадо, с которым мне нужно немного помочь.У меня есть несколько флажков с одним и тем же именем, и я хотел бы 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"/>

Я могу получить значения каждого с помощью javascript pre-POST, но у меня проблемы с получением этого спискасторона питона (торнадо).я получаю только самое высокое выбранное значение.

на стороне питона это выглядит так:

...

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

Ответы [ 2 ]

2 голосов
/ 04 сентября 2010

Можно позволить нескольким тегам иметь один и тот же атрибут name , но атрибуты id должны быть уникальными - здесь они не являются(если только каждое из этих вхождений идентичного DB_BASED_ID каким-то образом не должно быть заменено другим значением? Но тогда почему бы не показать вещи на самом деле отличные, как они появляются внастоящий HTML ?!), что делает этот недопустимый HTML и вызывает всевозможные проблемы.

Как только эта проблема исправлена, в этих методах-обработчиках self.request.arguments['activity'] (если этот строковый ключ присутствует в указанном каталоге)будет список непустых значений для всех входных данных с именем 'activity' (если есть).

0 голосов
/ 06 октября 2018

Это также может быть выполнено с помощью цикла для динамического представления и сбора. Гипотетически, если вы предоставляете список для проверки в методе 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)

Это сочетает в себе шаблонную функцию Торнадо (jinja2) с небольшим количеством HTML для простого интерфейса. Выполнимо и быстро, по общему признанию, не лучшее решение для производства. Надеюсь, это поможет!

...