Это также может быть выполнено с помощью цикла для динамического представления и сбора. Гипотетически, если вы предоставляете список для проверки в методе 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 для простого интерфейса. Выполнимо и быстро, по общему признанию, не лучшее решение для производства. Надеюсь, это поможет!