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
---------------------------------------------
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
__________ Informação do NOD32 IMON 1.1586 (20060608) __________
Esta mensagem foi verificada pelo NOD32 si
__._,_.___
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
__,_._,___
_______________________________________________________
Novo Yahoo! Messenger com voz: Instale agora e faça ligações de graça.
http://br.messenger.yahoo.com/
|