[Twisted-Python] again on nested sequence

Manlio Perillo manlio_perillo at libero.it
Mon Jul 17 05:40:28 EDT 2006


Manlio Perillo ha scritto:
> Valentino Volonghi aka Dialtone ha scritto:
>>
>> On Sun, 16 Jul 2006 16:18:07 -0200, Manlio Perillo
>> <manlio_perillo at libero.it> wrote:
>>
>> This is off topic here... Twisted-web is the list. 

I have Cc to twisted-web, hoping this will help the archiving.

> 

Just for future reference, here is an alternate solution.
It contains more code, but it is more database friendly
(and I like this - better performance too?).

It also contains some correction for the HTML code.

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:n="http://nevow.com/ns/nevow/0.1"
      lang="it" xml:lang="it">
  <head>
    <title>Nested sequence II</title>
  </head>
  <body>
    <form action="post" method="post">
      <ul n:render="sequence" n:data="control_list">
        <li n:pattern="item" n:render="control">
          <label><n:slot name="ctrl_label"/>
            <select n:render="option_list">
              <n:attr name="name"><n:slot name="ctrl_name" /></n:attr>
              <option n:pattern="item" n:render="option">
                  <n:attr name="value"><n:slot name="opt_value" /></n:attr>
                  <n:slot name="opt_label" />
                </option>
            </select>
          </label>
        </li>
      </ul>
      <input type="submit" value="send" />
    </form>
  </body>
</html>


class Main(rend.Page):
    addSlash = True
    docFactory = loaders.xmlfile('nestedsequence.xhtml')

    def data_control_list(self, ctx, data):
        return [('a', 'first'),  ('b', 'second')]

    def render_option_list(self, ctx, data):
        option_list = [('1', 'uno'), ('2', 'due')]
        tag = ctx.tag

        pattern = inevow.IQ(ctx).patternGenerator("item")
        content = [pattern(data=option) for option in option_list]

        return ctx.tag.clear()[content]

    def render_control(self, ctx, data):
        print '*', data
        ctx.fillSlots('ctrl_label', data[1])
        ctx.fillSlots('ctrl_name', data[0])

        return ctx.tag

    def render_option(self, ctx, data):
        ctx.fillSlots('opt_label', data[1])
        ctx.fillSlots('opt_value', data[0])

        return ctx


Maybe it is not reusable as the previous solution, but it's not a problem.



Regards  Manlio Perillo




More information about the Twisted-Python mailing list