Fala, Jackson.

O começo é muito legal ... Vc compara c/ o q já sabe e pensa: "Cara, onde é q estava esse negócio todo esse tempo, qdo eu escrevia tanto código a toa?" ...
Bom, eu não fiz o projeto do zoológico nem o álbum de fotos do élvis mas os lí p/ aprender muito do q sei hj. Uma das coisas q mais t recomendo, e a quem mais estiver começando, é Zope Book [1] de cima a baixo! ...
O exemplo que o Zénrique deu, e q foi a q me referi qdo falei d jeito mais simples e fácil (mas q ia mexer mais no teu código - mas, seé p/ aprender e ñ tem prazo correndo, mexe mesmo!), tá lá ;-)

[1] http://www.plope.com/Books/2_7Edition

[ ]ão,

--
JJ (|´:¬{)»
---------------------------------------------
"Eu sou a ressurreição e a vida. Quem crê em mim, ainda que morra, viverá; e todo o que vive e crê em mim não morrerá, eternamente. Crês isto?"
O Senhor, Jesus Cristo - Jo.11:25-26
---------------------------------------------

Em 08/06/06, Jackson <[EMAIL PROTECTED]> escreveu:
Bah gente valeu mesmo, to aprendendo Python ainda, mas é muuuuito mais fácil que VB que eu já programo, não riam, nem falem mal é o meu sustento.
Tem algum curso de Zope/Plone online bom, pq se for só pra ensinar a fazer o projeto de zoológico ou o do élvis num dá?

José Henrique escreveu:
Como o JJ já respondeu, não dá pra passar uma lista através do test.  Sempre será passada uma string.  Para testar, você deve passar a lista utilizando outro script python ou um page template.

Quanto ao seu código, algumas observações:

Aqui você está criando uma string.  Não sei qual seu objetivo, mas se você pretende ler isso no zsql method como uma lista de autores e idiomas, então o correto é passar uma lista ou tupla e não uma string.
   #cria o parâmetro do in SQL
   lstAutores = '('
   for i in range(len(Autores)):
       lstAutores = lstAutores + Autores[i] + ', '
   lstAutores = lstAutores[0:len(Autores[i]) - 2] + ')'

Outra coisa, em python não é necessário criar contadores em loops para ler uma lista, basta ler item a item, dessa forma:

for item in Autores:
    lstAutores = lstAutores + item + ',' ...

Se o seu objetivo for simplesmente transformar uma lista em uma string, você pode utilizar a função repr():

lstAutores = repr(Autores)

#retorna a lista para ser processada pelo zSQL method
return retorno

Para ler uma lista no zsql method, usando o operador in, utilize o dtml-sqltest.  Olhe esse exemplo:

<dtml-sqltest "autor" type="nb" optional multiple>

Quando você usa a opção multiple essa linha pode ser traduzida de duas formas:

a) se autor for uma string (
'José da Silva', por exemplo) :

autor = 'José da Silva'

b) se autor for uma lista:

autor in ('
José da Silva','Maria do Socorro','Carlos Alberto')

Com essa opção fica bem fácil de tratar os dados no zsql method.

Zénrique.

2006/6/7, JJ (Arnaldo Janz Júnior) <[EMAIL PROTECTED]>:
Ôpa, Jackson ...

Se vc mandar uma string e tratá-la como uma lista (fazendo um loop nela, por exemplo), ela vai ser tratada como uma lista de caracteres.
O lance de não conseguir mandar pelo "test" é um bug dele. Ele manda tudo o q vc passar lá como string. Se alguém souber como contornar isso, a ajuda é muito bem-vinda! ... ;-)
Outra coisa é q vc ñ tá retornando algo como ['jackson', 'luiz', 'de', 'marco'] mas uma lista c/ apenas 2 ítens string, como ['(jackson, luiz, de, marco)', '(português, grego, klingon)']. Estou imaginando q vc trata isso onde foi chamado esse script, antes de chamar o ZSQLMethod, p/ o qual vc passa parâmetros separados (listas separadas).
Bom, sugestão rápida: tire os parêntesis do início e do fim das strings montadas nos loops (ficando elas como 'jackson, luiz, de, marco') e, qdo recuperá-las no ZSQLMethod, chame expr="var.split()" no lugar do nome da variável que tem a lista (que chamei de var). Ex.: select * from tabela where campo in <dtml-sqlvar expr="var.split()" type="string">.
Existe jeito mais simples (e tvz mais fácil) de implementar isso mas esse é o jeito que te faz mexer menos no q vc já tem.

[ ],
--
JJ (|´:¬{)»
---------------------------------------------
"Eu sou a ressurreição e a vida. Quem crê em mim, ainda que morra, viverá; e todo o que vive e crê em mim não morrerá, eternamente. Crês isto?"
O Senhor, Jesus Cristo - Jo.11:25-26
---------------------------------------------

Em 02/06/06, Jackson <[EMAIL PROTECTED] > escreveu:
Opa sô eu dnovo ...

Outro probleminha de iniciante

como faço para passar uma lista como parâmetro para um script python?
tentei lá no test, mas não consegui passei de tudo quanto é jeito, mas
naum funcionou como eu queria...

o objetivo é o seguinte ... gerar uma lista para passar num zsql para
fazer a cláusula in do SQL

tipo passo ['jackson', 'luiz', 'de', 'marco'] e ele não faz ('jackson',
'luiz', 'de', 'marco') ele faz letra a letra

vou postar o código aqui ( não liguem para a falta de estilo, novato na
área)

Usuario = container.LoggedUser()

#pesquisa nas tabelas as preferências do usuários, retornando uma lista
Autores = container.cPrefAutores(Usuario)
Idiomas = container.cPrefIdiomas(Usuario)
#fica fora até resolver os de cima
#Generos = container.cPrefGeneros(Usuario)
#Literaturas = container.cPrefLiteraturas(Usuario)

#cria uma lista
retorno = []

#se a lista não tiver vazia
if Autores:
   #cria o parâmetro do in SQL
   lstAutores = '('
   for i in range(len(Autores)):
       lstAutores = lstAutores + Autores[i] + ', '
   lstAutores = lstAutores[0:len(Autores[i]) - 2] + ')'

if Idiomas:
   #cria o parâmetro do in SQL
   lstIdiomas = '('
   for i in range(len(Idiomas)):
       lstIdiomas = lstIdiomas + Idiomas[i] + ', '
   lstIdiomas = lstIdiomas[0:len(Idiomas[i]) - 2] + ')'

#adiciona as strings em uma lista
retorno.append(lstAutores)
retorno.append(lstIdiomas)

#retorna a lista para ser processada pelo zSQL method
return retorno
__._,_.___

Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED]




Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE


Links do Yahoo! Grupos

__,_._,___

Responder a