Флажки с пилонами - PullRequest
       16

Флажки с пилонами

1 голос
/ 16 марта 2010

Я пытался добавить несколько флажков в пилонах Мако. Однако я не знаю, как получить их значения в контроллере. Кажется, он может получить только первое значение из флажков. Я пытался использовать кодирование формы, но я получил несколько ошибок. Есть ли более простой способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 16 марта 2010

Я предполагаю, что «я могу получить только первое значение» означает, что у вас есть ряд флажков с тем же значением для атрибута «имя» в вашей форме?

Теперь, если это так, и вы хотите получить список логических значений на основе того, установлены ли флажки или нет, вам нужно будет сделать две вещи:

Сначала, когда вы определяете свои элементы формы с помощью form encode на вашем флажке, установите его так, чтобы отсутствующее значение в элементе флажка возвращало «False».Таким образом, поскольку браузер не будет отправлять значение свыше, если флажок не «включен», ваша проверка приводит к отсутствующему значению False.


    class Registration(formencode.Schema):  
        box = formencode.validators.StringBoolean(if_missing=False)

Далее, если вы хотите, чтобы список был возвращен, вы 'Я не смогу назвать все ваши элементы одинаковыми.Пилоны поддерживают вложенную структуру.Посмотрите на formencode.variabledecode.NestedVariables.Короче говоря, вам нужно определить экземпляр NestedVariables как один из атрибутов вашего класса, а атрибуты имени вашей формы нужно будет изменить, чтобы они содержали явные индексы.

Редактировать .. вот полный пример, который я сделал очень быстро:


import logging
import pprint

import formencode
from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect
from pylons.decorators import validate

from testproj.lib.base import BaseController, render

log = logging.getLogger(__name__)

class CheckList(formencode.Schema):
    box = formencode.validators.StringBoolean(if_missing=False)
    hidden = formencode.validators.String()

class EnclosingForm(formencode.Schema):
    pre_validators = [formencode.NestedVariables()]
    boxes = formencode.ForEach(CheckList())

class MyformController(BaseController):

    def index(self):
        schema = EnclosingForm()
        v = schema.to_python(dict(request.params))
        # Return a rendered template
        #return render('/myform.mako')
        # or, return a response
        response.content_type = 'text/plain'
        return pprint.pformat(v)


А затем строка запроса?

boxes-0.box=true&boxes-0.hidden=hidden&boxes-1.box=true&
boxes-1.hidden=hidden&boxes-2.hidden=hidden

И, наконец, ответ:

{'boxes': [{'box': True, 'hidden': u'hidden'},
           {'box': True, 'hidden': u'hidden'},
           {'box': False, 'hidden': u'hidden'}]}

HTH

...